Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+πŸ–±οΈto focus. On Mac, use Cmdinstead of Ctrl.
import Mathlib.Algebra.Group.Defs
import Mathlib.Init.Algebra.Order
import ECTate.Algebra.Ring.Basic
import Mathlib.Init.Data.Nat.Lemmas
import ECTate.Init.Data.Int.Lemmas
import ECTate.Data.Nat.Enat
import Mathlib.Init.Data.Int.Basic
import ECTate.Algebra.EllipticCurve.Kronecker
import Mathlib.Tactic.LibrarySearch
import Mathlib.Tactic.Ring
import Mathlib.Tactic.Convert
--class ValueMonoid (A : Type u) extends AddCommMonoid A, LinearOrder A

open Enat

section Obvious

lemma 
match_non_zero: βˆ€ {Ξ² : Sort u_1} (x : β„•βˆͺ∞) {c1 c2 : Ξ²}, x β‰  0 β†’ (match x with | ofN Nat.zero => c1 | x => c2) = c2
match_non_zero
(x :
β„•βˆͺ∞: Type
β„•βˆͺ∞
) {
c1: Ξ²
c1
c2: Ξ²
c2
:
Ξ²: ?m.5
Ξ²
} : x β‰ 
0: ?m.18
0
β†’ (match x with | 0 =>
c1: Ξ²
c1
| _ =>
c2: Ξ²
c2
) =
c2: Ξ²
c2
:=
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²


x β‰  0 β†’ (match x with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: x β‰  0


(match x with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²


x β‰  0 β†’ (match x with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: x β‰  0


(match x with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: ofN 0 β‰  0


(match ofN 0 with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: x β‰  0


(match x with | ofN Nat.zero => c1 | x => c2) = c2

Goals accomplished! πŸ™
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: x β‰  0


(match x with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: ∞ β‰  0


(match ∞ with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: x β‰  0


(match x with | ofN Nat.zero => c1 | x => c2) = c2

Goals accomplished! πŸ™
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: x β‰  0


(match x with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

n: β„•

h: ofN (n + 1) β‰  0


(match ofN (n + 1) with | ofN Nat.zero => c1 | x => c2) = c2
Warning: unused variable `n` [linter.unusedVariables]
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

n: β„•

h: ofN (n + 1) β‰  0


(match ofN (n + 1) with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

n: β„•

h: ofN (n + 1) β‰  0


(match ofN (n + 1) with | ofN Nat.zero => c1 | x => c2) = c2
Ξ²: Sort u_1

x: β„•βˆͺ∞

c1, c2: Ξ²

h: x β‰  0


(match x with | ofN Nat.zero => c1 | x => c2) = c2

Goals accomplished! πŸ™
theorem
nat_mul_left_cancel: βˆ€ (a b c : β„•), a β‰  0 β†’ a * b = a * c β†’ b = c
nat_mul_left_cancel
(a b c :
Nat: Type
Nat
) (
h: a β‰  0
h
: a β‰ 
0: ?m.940
0
) : a * b = a * c β†’ b = c :=
Nat.eq_of_mul_eq_mul_left: βˆ€ {m k n : β„•}, 0 < n β†’ n * m = n * k β†’ m = k
Nat.eq_of_mul_eq_mul_left
(
Nat.pos_of_ne_zero: βˆ€ {n : β„•}, n β‰  0 β†’ 0 < n
Nat.pos_of_ne_zero
h: a β‰  0
h
) end Obvious structure
SurjVal: {R : Type u} β†’ R β†’ [inst : IntegralDomain R] β†’ Type u
SurjVal
{
R: Type u
R
:
Type u: Type (u + 1)
Type u
} (
p: R
p
:
R: Type u
R
) [
IntegralDomain: Type ?u.1068 β†’ Type ?u.1068
IntegralDomain
R: Type u
R
] where
v: {R : Type u} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
:
R: Type u
R
β†’
β„•βˆͺ∞: Type
β„•βˆͺ∞
v_uniformizer: βˆ€ {R : Type u} {p : R} [inst : IntegralDomain R] (self : SurjVal p), SurjVal.v self p = ofN 1
v_uniformizer
:
v: R β†’ β„•βˆͺ∞
v
p: R
p
= ofN
1: ?m.1079
1
v_mul_eq_add_v: βˆ€ {R : Type u} {p : R} [inst : IntegralDomain R] (self : SurjVal p) (a b : R), SurjVal.v self (a * b) = SurjVal.v self a + SurjVal.v self b
v_mul_eq_add_v
(
a: R
a
b: R
b
:
R: Type u
R
) :
v: R β†’ β„•βˆͺ∞
v
(
a: R
a
*
b: R
b
) =
v: R β†’ β„•βˆͺ∞
v
a: R
a
+
v: R β†’ β„•βˆͺ∞
v
b: R
b
v_add_ge_min_v: βˆ€ {R : Type u} {p : R} [inst : IntegralDomain R] (self : SurjVal p) (a b : R), SurjVal.v self (a + b) β‰₯ min (SurjVal.v self a) (SurjVal.v self b)
v_add_ge_min_v
(
a: R
a
b: R
b
:
R: Type u
R
) :
v: R β†’ β„•βˆͺ∞
v
(
a: R
a
+
b: R
b
) β‰₯
min: {Ξ± : Type ?u.1326} β†’ [self : Min Ξ±] β†’ Ξ± β†’ Ξ± β†’ Ξ±
min
(
v: R β†’ β„•βˆͺ∞
v
a: R
a
) (
v: R β†’ β„•βˆͺ∞
v
b: R
b
)
v_eq_top_iff_zero: βˆ€ {R : Type u} {p : R} [inst : IntegralDomain R] (self : SurjVal p) (a : R), SurjVal.v self a = ∞ ↔ a = 0
v_eq_top_iff_zero
(
a: R
a
:
R: Type u
R
) :
v: R β†’ β„•βˆͺ∞
v
a: R
a
= ∞ ↔
a: R
a
=
0: ?m.1352
0
variable {
R: Type u
R
:
Type u: Type (u + 1)
Type u
} [
IntegralDomain: Type ?u.2056 β†’ Type ?u.2056
IntegralDomain
R: Type u
R
] section SurjVal lemma
p_non_zero: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R}, SurjVal p β†’ Β¬p = 0
p_non_zero
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.2061} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.2061
SurjVal
p: R
p
) : Β¬
p: R
p
=
0: ?m.2071
0
:=
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


Β¬p = 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


Β¬p = 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


Β¬p = 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


Β¬p = 0

Goals accomplished! πŸ™
@[simp] lemma
val_zero: βˆ€ {p : R} (nav : SurjVal p), SurjVal.v nav 0 = ∞
val_zero
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.2231} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.2231
SurjVal
p: R
p
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.2240} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
0: ?m.2248
0
= ∞ := (
nav: SurjVal p
nav
.
v_eq_top_iff_zero: βˆ€ {R : Type ?u.2303} {p : R} [inst : IntegralDomain R] (self : SurjVal p) (a : R), SurjVal.v self a = ∞ ↔ a = 0
v_eq_top_iff_zero
0: ?m.2308
0
).
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
rfl: βˆ€ {Ξ± : Sort ?u.2314} {a : Ξ±}, a = a
rfl
lemma
val_mul_ge_left: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (nav : SurjVal p) (a b : R), SurjVal.v nav (a * b) β‰₯ SurjVal.v nav a
val_mul_ge_left
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.2340} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.2340
SurjVal
p: R
p
) (
a: R
a
b: R
b
:
R: Type u
R
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.2353} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
*
b: R
b
) β‰₯
nav: SurjVal p
nav
.
v: {R : Type ?u.2453} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
:=
Enat.le_trans: βˆ€ {n m k : β„•βˆͺ∞}, n ≀ m β†’ m ≀ k β†’ n ≀ k
Enat.le_trans
(
le_add_right: βˆ€ (n k : β„•βˆͺ∞), n ≀ n + k
le_add_right
(
nav: SurjVal p
nav
.
v: {R : Type ?u.2478} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
) (
nav: SurjVal p
nav
.
v: {R : Type ?u.2482} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
b: R
b
)) (
le_of_eq: βˆ€ {Ξ± : Type ?u.2486} [inst : Preorder Ξ±] {a b : Ξ±}, a = b β†’ a ≀ b
le_of_eq
(
nav: SurjVal p
nav
.
v_mul_eq_add_v: βˆ€ {R : Type ?u.2493} {p : R} [inst : IntegralDomain R] (self : SurjVal p) (a b : R), SurjVal.v self (a * b) = SurjVal.v self a + SurjVal.v self b
v_mul_eq_add_v
a: R
a
b: R
b
).
symm: βˆ€ {Ξ± : Sort ?u.2497} {a b : Ξ±}, a = b β†’ b = a
symm
) lemma
val_mul_ge_right: βˆ€ {p : R} (nav : SurjVal p) (a b : R), SurjVal.v nav (a * b) β‰₯ SurjVal.v nav b
val_mul_ge_right
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.2522} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.2522
SurjVal
p: R
p
) (
a: R
a
b: R
b
:
R: Type u
R
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.2535} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
*
b: R
b
) β‰₯
nav: SurjVal p
nav
.
v: {R : Type ?u.2635} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
b: R
b
:=
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R


SurjVal.v nav (a * b) β‰₯ SurjVal.v nav b
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R


SurjVal.v nav (a * b) β‰₯ SurjVal.v nav b
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R


SurjVal.v nav (b * a) β‰₯ SurjVal.v nav b
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R


SurjVal.v nav (b * a) β‰₯ SurjVal.v nav b
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R


SurjVal.v nav (a * b) β‰₯ SurjVal.v nav b

Goals accomplished! πŸ™
lemma
val_mul_ge_of_left_ge: βˆ€ {n : β„•βˆͺ∞} {p : R} (nav : SurjVal p) {a b : R}, SurjVal.v nav a β‰₯ n β†’ SurjVal.v nav (a * b) β‰₯ n
val_mul_ge_of_left_ge
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.2786} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.2786
SurjVal
p: R
p
) {
a: R
a
b: R
b
:
R: Type u
R
} (
ha: SurjVal.v nav a β‰₯ n
ha
:
nav: SurjVal p
nav
.
v: {R : Type ?u.2796} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
β‰₯
n: ?m.2781
n
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.2808} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
*
b: R
b
) β‰₯
n: ?m.2781
n
:=
Enat.le_trans: βˆ€ {n m k : β„•βˆͺ∞}, n ≀ m β†’ m ≀ k β†’ n ≀ k
Enat.le_trans
ha: SurjVal.v nav a β‰₯ n
ha
(
val_mul_ge_left: βˆ€ {R : Type ?u.2927} [inst : IntegralDomain R] {p : R} (nav : SurjVal p) (a b : R), SurjVal.v nav (a * b) β‰₯ SurjVal.v nav a
val_mul_ge_left
nav: SurjVal p
nav
a: R
a
b: R
b
) lemma
val_mul_ge_of_right_ge: βˆ€ {n : β„•βˆͺ∞} {p : R} (nav : SurjVal p) {a b : R}, SurjVal.v nav b β‰₯ n β†’ SurjVal.v nav (a * b) β‰₯ n
val_mul_ge_of_right_ge
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.2950} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.2950
SurjVal
p: R
p
) {
a: R
a
b: R
b
:
R: Type u
R
} (
hb: SurjVal.v nav b β‰₯ n
hb
:
nav: SurjVal p
nav
.
v: {R : Type ?u.2986} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
b: R
b
β‰₯
n: ?m.2971
n
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.2998} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
*
b: R
b
) β‰₯
n: ?m.2971
n
:=
Enat.le_trans: βˆ€ {n m k : β„•βˆͺ∞}, n ≀ m β†’ m ≀ k β†’ n ≀ k
Enat.le_trans
hb: SurjVal.v nav b β‰₯ n
hb
(
val_mul_ge_right: βˆ€ {R : Type ?u.3117} [inst : IntegralDomain R] {p : R} (nav : SurjVal p) (a b : R), SurjVal.v nav (a * b) β‰₯ SurjVal.v nav b
val_mul_ge_right
nav: SurjVal p
nav
a: R
a
b: R
b
) lemma
val_mul_ge_of_both_ge: βˆ€ {m n : β„•βˆͺ∞} {p : R} (nav : SurjVal p) {a b : R}, SurjVal.v nav a β‰₯ m β†’ SurjVal.v nav b β‰₯ n β†’ SurjVal.v nav (a * b) β‰₯ m + n
val_mul_ge_of_both_ge
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.3198} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.3198
SurjVal
p: R
p
) {
a: R
a
b: R
b
:
R: Type u
R
} (
ha: SurjVal.v nav a β‰₯ m
ha
:
nav: SurjVal p
nav
.
v: {R : Type ?u.3208} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
β‰₯
m: ?m.3161
m
) (
hb: SurjVal.v nav b β‰₯ n
hb
:
nav: SurjVal p
nav
.
v: {R : Type ?u.3217} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
b: R
b
β‰₯
n: ?m.3193
n
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.3226} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
*
b: R
b
) β‰₯
m: ?m.3161
m
+
n: ?m.3193
n
:=
R: Type u

inst✝: IntegralDomain R

m, n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ m

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a * b) β‰₯ m + n
R: Type u

inst✝: IntegralDomain R

m, n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ m

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a * b) β‰₯ m + n
R: Type u

inst✝: IntegralDomain R

m, n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ m

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav a + SurjVal.v nav b β‰₯ m + n
R: Type u

inst✝: IntegralDomain R

m, n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ m

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav a + SurjVal.v nav b β‰₯ m + n
R: Type u

inst✝: IntegralDomain R

m, n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ m

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a * b) β‰₯ m + n

Goals accomplished! πŸ™
@[simp] lemma
val_of_one: βˆ€ {p : R} (nav : SurjVal p), SurjVal.v nav 1 = ofN 0
val_of_one
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.3442} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.3442
SurjVal
p: R
p
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.3451} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
1: ?m.3459
1
= ofN
0: ?m.3511
0
:=
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


SurjVal.v nav 1 = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav 1 + ofN 1 = ofN 0 + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


SurjVal.v nav 1 = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav 1 + ofN 1 = ofN 0 + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav 1 + ofN 1 = ofN (0 + 1)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav 1 + ofN 1 = ofN 0 + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav 1 + SurjVal.v nav p = SurjVal.v nav p
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav 1 + ofN 1 = ofN 0 + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav (1 * p) = SurjVal.v nav p
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav 1 + ofN 1 = ofN 0 + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


a
SurjVal.v nav p = SurjVal.v nav p

Goals accomplished! πŸ™
lemma
val_pow_ge_of_ge: βˆ€ {R : Type u} [inst : IntegralDomain R] {m : β„•βˆͺ∞} {p : R} (nav : SurjVal p) {a : R} (k : β„•), SurjVal.v nav a β‰₯ m β†’ SurjVal.v nav (a ^ k) β‰₯ k β€’ m
val_pow_ge_of_ge
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.3719} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.3719
SurjVal
p: R
p
) {
a: R
a
:
R: Type u
R
} (k :
β„•: Type
β„•
) (
ha: SurjVal.v nav a β‰₯ m
ha
:
nav: SurjVal p
nav
.
v: {R : Type ?u.3755} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
β‰₯
m: ?m.3740
m
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.3767} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
^ k) β‰₯ k β€’
m: ?m.3740
m
:=
R: Type u

inst✝: IntegralDomain R

m: β„•βˆͺ∞

p: R

nav: SurjVal p

a: R

k: β„•

ha: SurjVal.v nav a β‰₯ m


SurjVal.v nav (a ^ k) β‰₯ k β€’ m
R: Type u

inst✝: IntegralDomain R

m: β„•βˆͺ∞

p: R

nav: SurjVal p

a: R

k: β„•

ha: SurjVal.v nav a β‰₯ m


SurjVal.v nav (a ^ k) β‰₯ k β€’ m
R: Type u

inst✝: IntegralDomain R

m: β„•βˆͺ∞

p: R

nav: SurjVal p

a: R

ha: SurjVal.v nav a β‰₯ m


zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

m: β„•βˆͺ∞

p: R

nav: SurjVal p

a: R

k: β„•

ha: SurjVal.v nav a β‰₯ m


SurjVal.v nav (a ^ k) β‰₯ k β€’ m
R: Type u

inst✝: IntegralDomain R

m: β„•βˆͺ∞

p: R

nav: SurjVal p

a: R

ha: SurjVal.v nav a β‰₯ m

k: β„•

ih: SurjVal.v nav (a ^ k) β‰₯ k β€’ m


succ
R: Type u

inst✝: IntegralDomain R

m: β„•βˆͺ∞

p: R

nav: SurjVal p

a: R

ha: SurjVal.v nav a β‰₯ m

k: β„•

ih: SurjVal.v nav (a ^ k) β‰₯ k β€’ m


succ
SurjVal.v nav (a * a ^ k) β‰₯ m + k β€’ m
R: Type u

inst✝: IntegralDomain R

m: β„•βˆͺ∞

p: R

nav: SurjVal p

a: R

ha: SurjVal.v nav a β‰₯ m

k: β„•

ih: SurjVal.v nav (a ^ k) β‰₯ k β€’ m


succ

Goals accomplished! πŸ™
lemma
val_add_ge_of_ge: βˆ€ {R : Type u} [inst : IntegralDomain R] {n : β„•βˆͺ∞} {p : R} (nav : SurjVal p) {a b : R}, SurjVal.v nav a β‰₯ n β†’ SurjVal.v nav b β‰₯ n β†’ SurjVal.v nav (a + b) β‰₯ n
val_add_ge_of_ge
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.4790} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.4790
SurjVal
p: R
p
) {
a: R
a
b: R
b
:
R: Type u
R
} (
ha: SurjVal.v nav a β‰₯ n
ha
:
nav: SurjVal p
nav
.
v: {R : Type ?u.4800} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
β‰₯
n: ?m.4785
n
) (
hb: SurjVal.v nav b β‰₯ n
hb
:
nav: SurjVal p
nav
.
v: {R : Type ?u.4812} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
b: R
b
β‰₯
n: ?m.4785
n
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.4821} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
+
b: R
b
) β‰₯
n: ?m.4785
n
:=
Enat.le_trans: βˆ€ {n m k : β„•βˆͺ∞}, n ≀ m β†’ m ≀ k β†’ n ≀ k
Enat.le_trans
(
le_min: βˆ€ {Ξ± : Type ?u.4946} [inst : LinearOrder Ξ±] {a b c : Ξ±}, c ≀ a β†’ c ≀ b β†’ c ≀ min a b
le_min
ha: SurjVal.v nav a β‰₯ n
ha
hb: SurjVal.v nav b β‰₯ n
hb
) (
nav: SurjVal p
nav
.
v_add_ge_min_v: βˆ€ {R : Type ?u.4953} {p : R} [inst : IntegralDomain R] (self : SurjVal p) (a b : R), SurjVal.v self (a + b) β‰₯ min (SurjVal.v self a) (SurjVal.v self b)
v_add_ge_min_v
a: R
a
b: R
b
) def
nat_of_val: {p : R} β†’ SurjVal p β†’ {a : R} β†’ a β‰  0 β†’ β„•
nat_of_val
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.4974} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.4974
SurjVal
p: R
p
) {
a: R
a
:
R: Type u
R
} (
h: a β‰  0
h
:
a: R
a
β‰ 
0: ?m.4987
0
) :
β„•: Type
β„•
:=
to_nat: {a : β„•βˆͺ∞} β†’ a β‰  ∞ β†’ β„•
to_nat
((
not_iff_not: βˆ€ {a b : Prop}, (Β¬a ↔ Β¬b) ↔ (a ↔ b)
not_iff_not
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
(
nav: SurjVal p
nav
.
v_eq_top_iff_zero: βˆ€ {R : Type ?u.5052} {p : R} [inst : IntegralDomain R] (self : SurjVal p) (a : R), SurjVal.v self a = ∞ ↔ a = 0
v_eq_top_iff_zero
a: R
a
)).
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
h: a β‰  0
h
) /- lemma val_of_add_one {p : R} (nav : SurjVal p) (h : nav.v x β‰₯ ofN 1): nav.v (x + 1) = ofN 0 := by apply Enat.le_antisymm . apply le_of_not_lt intro h' sorry . apply Enat.le_trans _ (nav.v_add_ge_min_v x 1) apply le_min (Enat.le_trans (Enat.le_succ 0) h) (le_of_eq (val_of_one nav).symm) -/ @[simp] lemma
val_of_minus_one: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (nav : SurjVal p), SurjVal.v nav (-1) = ofN 0
val_of_minus_one
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.5146} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.5146
SurjVal
p: R
p
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.5155} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(-
1: ?m.5164
1
) = ofN
0: ?m.5247
0
:=
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

x✝: SurjVal.v nav (-1) = ofN 0 ∨ SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) = ofN 0


inl
SurjVal.v nav (-1) = ofN 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

x✝: SurjVal.v nav (-1) = ofN 0 ∨ SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


inr
SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


inr
SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav 1 > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav 1 > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (- -1) > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav 1 > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (- -(1 * 1)) > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav 1 > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (-(-1 * 1)) > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav 1 > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (-1 * -1) > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav 1 > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (-1) + SurjVal.v nav (-1) > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav (-1) + SurjVal.v nav (-1) > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


SurjVal.v nav 1 > ofN 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


inr
SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0

contradiction: SurjVal.v nav 1 > ofN 0


inr
SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0

contradiction: ofN 0 > ofN 0


inr
SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0

contradiction: ofN 0 > ofN 0


inr
SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0

contradiction: ofN 0 > ofN 0


inr
SurjVal.v nav (-1) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

h: SurjVal.v nav (-1) > ofN 0


inr
SurjVal.v nav (-1) = ofN 0

Goals accomplished! πŸ™
@[simp] lemma
val_neg: βˆ€ {x p : R} (nav : SurjVal p), SurjVal.v nav (-x) = SurjVal.v nav x
val_neg
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.5788} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.5788
SurjVal
p: R
p
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.5817} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(-
x: ?m.5806
x
) =
nav: SurjVal p
nav
.
v: {R : Type ?u.5845} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: ?m.5806
x
:=
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-x) = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-x) = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-(1 * x)) = SurjVal.v nav (1 * x)
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-x) = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-1 * x) = SurjVal.v nav (1 * x)
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-x) = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-1) + SurjVal.v nav x = SurjVal.v nav (1 * x)
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-x) = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


ofN 0 + SurjVal.v nav x = SurjVal.v nav (1 * x)
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-x) = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


ofN 0 + SurjVal.v nav x = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav (-x) = SurjVal.v nav x
R: Type u

inst✝: IntegralDomain R

x, p: R

nav: SurjVal p


SurjVal.v nav x = SurjVal.v nav x

Goals accomplished! πŸ™
lemma
val_sub_ge_of_ge: βˆ€ {R : Type u} [inst : IntegralDomain R] {n : β„•βˆͺ∞} {p : R} (nav : SurjVal p) {a b : R}, SurjVal.v nav a β‰₯ n β†’ SurjVal.v nav b β‰₯ n β†’ SurjVal.v nav (a - b) β‰₯ n
val_sub_ge_of_ge
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.6115} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.6115
SurjVal
p: R
p
) {
a: R
a
b: R
b
:
R: Type u
R
} (
ha: SurjVal.v nav a β‰₯ n
ha
:
nav: SurjVal p
nav
.
v: {R : Type ?u.6125} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
β‰₯
n: ?m.6110
n
) (
hb: SurjVal.v nav b β‰₯ n
hb
:
nav: SurjVal p
nav
.
v: {R : Type ?u.6137} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
b: R
b
β‰₯
n: ?m.6110
n
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.6146} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
-
b: R
b
) β‰₯
n: ?m.6110
n
:=
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a - b) β‰₯ n
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a - b) β‰₯ n
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a + -b) β‰₯ n
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a + -b) β‰₯ n
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a - b) β‰₯ n
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


ha
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


hb
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a - b) β‰₯ n
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


hb
R: Type u

inst✝: IntegralDomain R

n: β„•βˆͺ∞

p: R

nav: SurjVal p

a, b: R

ha: SurjVal.v nav a β‰₯ n

hb: SurjVal.v nav b β‰₯ n


SurjVal.v nav (a - b) β‰₯ n

Goals accomplished! πŸ™
theorem
v_add_eq_min_v: βˆ€ {p : R} (nav : SurjVal p) {a b : R}, SurjVal.v nav a < SurjVal.v nav b β†’ SurjVal.v nav (a + b) = SurjVal.v nav a
v_add_eq_min_v
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.6665} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.6665
SurjVal
p: R
p
) {
a: R
a
b: R
b
:
R: Type u
R
} (
h: SurjVal.v nav a < SurjVal.v nav b
h
:
nav: SurjVal p
nav
.
v: {R : Type ?u.6678} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
<
nav: SurjVal p
nav
.
v: {R : Type ?u.6685} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
b: R
b
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.6697} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
a: R
a
+
b: R
b
) =
nav: SurjVal p
nav
.
v: {R : Type ?u.6798} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
:=
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


SurjVal.v nav (a + b) = SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


SurjVal.v nav (a + b) = SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1.h
Β¬SurjVal.v nav a < SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)


h1.h
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)


h1.h
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)


SurjVal.v nav a < SurjVal.v nav (-b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)


SurjVal.v nav a < SurjVal.v nav (-b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)


SurjVal.v nav a < SurjVal.v nav b
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)


SurjVal.v nav a < SurjVal.v nav b
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)

hm: SurjVal.v nav a < SurjVal.v nav (-b)


h1.h
SurjVal.v nav a < SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)

hm: SurjVal.v nav a < SurjVal.v nav (-b)


h1.h
min (SurjVal.v nav (a + b)) (SurjVal.v nav (-b)) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)

hm: SurjVal.v nav a < SurjVal.v nav (-b)


h1.h
min (SurjVal.v nav (a + b)) (SurjVal.v nav (-b)) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)

hm: SurjVal.v nav a < SurjVal.v nav (-b)


h1.h
min (SurjVal.v nav (a + b)) (SurjVal.v nav (-b)) ≀ SurjVal.v nav a

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)

hm: SurjVal.v nav a < SurjVal.v nav (-b)


h1.h
min (SurjVal.v nav (a + b)) (SurjVal.v nav (-b)) ≀ SurjVal.v nav (a + b + -b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b

h': SurjVal.v nav a < SurjVal.v nav (a + b)

hm: SurjVal.v nav a < SurjVal.v nav (-b)


h1.h
min (SurjVal.v nav (a + b)) (SurjVal.v nav (-b)) ≀ SurjVal.v nav (a + b + -b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h1
SurjVal.v nav (a + b) ≀ SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


SurjVal.v nav (a + b) = SurjVal.v nav a
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

a, b: R

h: SurjVal.v nav a < SurjVal.v nav b


h2
SurjVal.v nav a ≀ SurjVal.v nav (a + b)

Goals accomplished! πŸ™
theorem
val_of_pow_uniformizer: βˆ€ {n : β„•} {p : R} (nav : SurjVal p), SurjVal.v nav (p ^ n) = ofN n
val_of_pow_uniformizer
{
p: R
p
:
R: Type u
R
} (
nav: SurjVal p
nav
:
SurjVal: {R : Type ?u.7561} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.7561
SurjVal
p: R
p
) :
nav: SurjVal p
nav
.
v: {R : Type ?u.7567} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
p: R
p
^
n: ?m.7556
n
) = ofN
n: ?m.7556
n
:=
R: Type u

inst✝: IntegralDomain R

n: β„•

p: R

nav: SurjVal p


SurjVal.v nav (p ^ n) = ofN n
R: Type u

inst✝: IntegralDomain R

n: β„•

p: R

nav: SurjVal p


SurjVal.v nav (p ^ n) = ofN n
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


zero
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


zero
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


zero
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


zero
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p


zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

n: β„•

p: R

nav: SurjVal p


SurjVal.v nav (p ^ n) = ofN n
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
SurjVal.v nav (p * p ^ n) = ofN (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
SurjVal.v nav p + SurjVal.v nav (p ^ n) = ofN (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
SurjVal.v nav p + ofN n = ofN (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
ofN 1 + ofN n = ofN (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
ofN (1 + n) = ofN (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ
ofN (1 + n) = ofN (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

nav: SurjVal p

n: β„•

ih: SurjVal.v nav (p ^ n) = ofN n


succ

Goals accomplished! πŸ™
end SurjVal structure
EnatValRing: {R : Type u} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ (valtn : SurjVal p) β†’ (decr_val : R β†’ R) β†’ (βˆ€ {x : R}, SurjVal.v valtn x = 0 β†’ decr_val x = x) β†’ (βˆ€ {x : R}, SurjVal.v valtn x > 0 β†’ x = p * decr_val x) β†’ (residue_char : β„•) β†’ (βˆ€ (n : β„•), SurjVal.v valtn ↑n > 0 ↔ residue_char ∣ n) β†’ (R β†’ R) β†’ (R β†’ R β†’ R β†’ Bool) β†’ EnatValRing p
EnatValRing
{
R: Type u
R
:
Type u: Type (u + 1)
Type u
} (
p: R
p
:
R: Type u
R
) [
IntegralDomain: Type ?u.8171 β†’ Type ?u.8171
IntegralDomain
R: Type u
R
] where
valtn: {R : Type u} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
:
SurjVal: {R : Type ?u.8176} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.8176
SurjVal
p: R
p
decr_val: {R : Type u} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
:
R: Type u
R
β†’
R: Type u
R
zero_valtn_decr: βˆ€ {R : Type u} {p : R} [inst : IntegralDomain R] (self : EnatValRing p) {x : R}, SurjVal.v self.valtn x = 0 β†’ EnatValRing.decr_val self x = x
zero_valtn_decr
{
x: R
x
:
R: Type u
R
} (
h: SurjVal.v valtn x = 0
h
:
valtn: SurjVal p
valtn
.
v: {R : Type ?u.8191} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
=
0: ?m.8199
0
) :
decr_val: R β†’ R
decr_val
x: R
x
=
x: R
x
pos_valtn_decr: βˆ€ {R : Type u} {p : R} [inst : IntegralDomain R] (self : EnatValRing p) {x : R}, SurjVal.v self.valtn x > 0 β†’ x = p * EnatValRing.decr_val self x
pos_valtn_decr
{
x: R
x
:
R: Type u
R
} (
h: SurjVal.v valtn x > 0
h
:
valtn: SurjVal p
valtn
.
v: {R : Type ?u.8437} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
>
0: ?m.8442
0
) :
x: R
x
=
p: R
p
*
decr_val: R β†’ R
decr_val
x: R
x
residue_char: {R : Type u} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ β„•
residue_char
:
β„•: Type
β„•
def_char: βˆ€ {R : Type u} {p : R} [inst : IntegralDomain R] (self : EnatValRing p) (n : β„•), SurjVal.v self.valtn ↑n > 0 ↔ self.residue_char ∣ n
def_char
: βˆ€ n :
β„•: Type
β„•
,
valtn: SurjVal p
valtn
.
v: {R : Type ?u.8567} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(n :
R: Type u
R
) >
0: ?m.8650
0
↔
residue_char: β„•
residue_char
∣ n
norm_repr: {R : Type u} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
norm_repr
:
R: Type u
R
β†’
R: Type u
R
--generalization of modulo
quad_roots_in_residue_field: {R : Type u} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R β†’ R β†’ Bool
quad_roots_in_residue_field
:
R: Type u
R
β†’
R: Type u
R
β†’
R: Type u
R
β†’
Bool: Type
Bool
namespace EnatValRing /-- reduce the element x by valuation n (by dividing by an appropriate power of the uniformizer) -/ def
sub_val: {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.9675} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.9675
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (n :
β„•: Type
β„•
) :
R: Type u
R
:= match n with | 0 =>
x: R
x
|
Nat.succ: β„• β†’ β„•
Nat.succ
n => match evr.
valtn: {R : Type ?u.9717} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.9724} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
with | 0 =>
x: R
x
| _ =>
sub_val: {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (evr.
decr_val: {R : Type ?u.9956} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
x: R
x
) n @[simp] lemma
decr_val_zero: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p), decr_val evr 0 = 0
decr_val_zero
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.10425} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.10425
EnatValRing
p: R
p
) : evr.
decr_val: {R : Type ?u.10434} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
0: ?m.10442
0
=
0: ?m.10494
0
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


p * decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


h
0 = p * decr_val evr 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


p * decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


h
SurjVal.v evr.valtn 0 > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


p * decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


h
SurjVal.v evr.valtn 0 > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


p * decr_val evr 0 = 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

v_decr_zero: p * decr_val evr 0 = 0


decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

v_decr_zero: p = 0 ∨ decr_val evr 0 = 0


decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

v_decr_zero: p = 0 ∨ decr_val evr 0 = 0


decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

v_decr_zero: p = 0 ∨ decr_val evr 0 = 0


decr_val evr 0 = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


decr_val evr 0 = 0

Goals accomplished! πŸ™
@[simp] lemma
decr_val_neg: βˆ€ {p : R} (evr : EnatValRing p) (x : R), decr_val evr (-x) = -decr_val evr x
decr_val_neg
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.10798} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.10798
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) : evr.
decr_val: {R : Type ?u.10809} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
(-
x: R
x
) = -evr.
decr_val: {R : Type ?u.10841} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
x: R
x
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

x✝: SurjVal.v evr.valtn x = ofN 0 ∨ SurjVal.v evr.valtn x > ofN 0


decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0


inl
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0


inl
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0


SurjVal.v evr.valtn (-x) = ofN 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0


inl
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0

hm: SurjVal.v evr.valtn (-x) = ofN 0


inl
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0

hm: SurjVal.v evr.valtn (-x) = ofN 0


inl
decr_val evr (-x) = -x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0

hm: SurjVal.v evr.valtn (-x) = ofN 0


inl
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN 0

hm: SurjVal.v evr.valtn (-x) = ofN 0


inl
-x = -x

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

x✝: SurjVal.v evr.valtn x = ofN 0 ∨ SurjVal.v evr.valtn x > ofN 0


decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0


inr
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0


inr
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0


SurjVal.v evr.valtn (-x) > ofN 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0


inr
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0

hm: SurjVal.v evr.valtn (-x) > ofN 0


inr
p * decr_val evr (-x) = p * -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0


inr
decr_val evr (-x) = -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0

hm: SurjVal.v evr.valtn (-x) > ofN 0


inr
p * decr_val evr (-x) = p * -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0

hm: SurjVal.v evr.valtn (-x) > ofN 0


inr
p * decr_val evr (-x) = -(p * decr_val evr x)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0

hm: SurjVal.v evr.valtn (-x) > ofN 0


inr
p * decr_val evr (-x) = p * -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0

hm: SurjVal.v evr.valtn (-x) > ofN 0


inr
p * decr_val evr (-x) = -x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0

hm: SurjVal.v evr.valtn (-x) > ofN 0


inr
p * decr_val evr (-x) = p * -decr_val evr x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x > ofN 0

hm: SurjVal.v evr.valtn (-x) > ofN 0


inr
-x = -x

Goals accomplished! πŸ™
@[simp] lemma
decr_val_p_mul: βˆ€ {p : R} (evr : EnatValRing p) (x : R), decr_val evr (p * x) = x
decr_val_p_mul
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.11481} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.11481
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) : evr.
decr_val: {R : Type ?u.11492} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
(
p: R
p
*
x: R
x
) =
x: R
x
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


decr_val evr (p * x) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


decr_val evr (p * x) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


p * x = p * decr_val evr (p * x)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


SurjVal.v evr.valtn (p * x) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


p * x = p * decr_val evr (p * x)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


SurjVal.v evr.valtn (p * x) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


SurjVal.v evr.valtn p + SurjVal.v evr.valtn x > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


SurjVal.v evr.valtn (p * x) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


ofN 1 + SurjVal.v evr.valtn x > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


ofN 1 + SurjVal.v evr.valtn x > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


p * x = p * decr_val evr (p * x)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


decr_val evr (p * x) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: p * x = p * decr_val evr (p * x)


p * decr_val evr (p * x) = p * x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


decr_val evr (p * x) = x

Goals accomplished! πŸ™
@[simp] lemma
sub_val_zero_n: βˆ€ {p : R} (evr : EnatValRing p) (n : β„•), sub_val evr 0 n = 0
sub_val_zero_n
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.11932} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.11932
EnatValRing
p: R
p
) (n :
β„•: Type
β„•
) :
sub_val: {R : Type ?u.11943} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
0: ?m.11954
0
n =
0: ?m.12006
0
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

n: β„•


sub_val evr 0 n = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

n: β„•


sub_val evr 0 n = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p


zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

n: β„•


sub_val evr 0 n = 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

n: β„•

ih: sub_val evr 0 n = 0


succ
sub_val evr 0 (Nat.succ n) = 0

Goals accomplished! πŸ™
@[simp] lemma
sub_val_x_zero: βˆ€ {p : R} (evr : EnatValRing p) (x : R), sub_val evr x 0 = x
sub_val_x_zero
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.13412} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.13412
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) :
sub_val: {R : Type ?u.13423} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
0: ?m.13434
0
=
x: R
x
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


sub_val evr x 0 = x

Goals accomplished! πŸ™
lemma
sub_val_val_zero: βˆ€ {p : R} (evr : EnatValRing p) (x : R) (m : β„•), SurjVal.v evr.valtn x = 0 β†’ sub_val evr x m = x
sub_val_val_zero
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.13493} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.13493
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (m :
β„•: Type
β„•
) (
h: SurjVal.v evr.valtn x = 0
h
: evr.
valtn: {R : Type ?u.13506} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.13513} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
=
0: ?m.13521
0
) :
sub_val: {R : Type ?u.13753} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
m =
x: R
x
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = 0


sub_val evr x m = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = 0


sub_val evr x m = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = 0


zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = 0


sub_val evr x m = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = 0

m: β„•


succ
sub_val evr x (Nat.succ m) = x

Goals accomplished! πŸ™
lemma
sub_val_val_pos_succ: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) (x : R) (m : β„•), SurjVal.v evr.valtn x β‰  0 β†’ sub_val evr x (Nat.succ m) = sub_val evr (decr_val evr x) m
sub_val_val_pos_succ
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.14381} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.14381
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (m :
β„•: Type
β„•
) (
h: SurjVal.v evr.valtn x β‰  0
h
: evr.
valtn: {R : Type ?u.14395} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.14402} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰ 
0: ?m.14410
0
) :
sub_val: {R : Type ?u.14628} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
(
Nat.succ: β„• β†’ β„•
Nat.succ
m) =
sub_val: {R : Type ?u.14635} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (evr.
decr_val: {R : Type ?u.14642} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
x: R
x
) m :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x β‰  0


sub_val evr x (Nat.succ m) = sub_val evr (decr_val evr x) m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x β‰  0


(match SurjVal.v evr.valtn x with | ofN Nat.zero => x | x_1 => sub_val evr (decr_val evr x) m) = sub_val evr (decr_val evr x) m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x β‰  0


sub_val evr x (Nat.succ m) = sub_val evr (decr_val evr x) m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x β‰  0


(match SurjVal.v evr.valtn x with | ofN Nat.zero => x | x_1 => sub_val evr (decr_val evr x) m) = sub_val evr (decr_val evr x) m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x β‰  0


sub_val evr (decr_val evr x) m = sub_val evr (decr_val evr x) m

Goals accomplished! πŸ™
lemma
val_decr_val: βˆ€ {m : β„•} {p : R} (evr : EnatValRing p) (x : R), SurjVal.v evr.valtn x = ofN m β†’ SurjVal.v evr.valtn (decr_val evr x) = ofN (m - 1)
val_decr_val
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.16342} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.16342
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (
h: SurjVal.v evr.valtn x = ofN m
h
: evr.
valtn: {R : Type ?u.16350} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.16354} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
= ofN
m: ?m.16337
m
) : evr.
valtn: {R : Type ?u.16362} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.16366} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(evr.
decr_val: {R : Type ?u.16370} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
x: R
x
) = ofN (
m: ?m.16337
m
-
1: ?m.16378
1
) :=
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


SurjVal.v evr.valtn (decr_val evr x) = ofN (m - 1)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


SurjVal.v evr.valtn (decr_val evr x) = ofN (m - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN Nat.zero


zero
SurjVal.v evr.valtn (decr_val evr x) = ofN (Nat.zero - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN Nat.zero


zero
SurjVal.v evr.valtn (decr_val evr x) = ofN (Nat.zero - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN Nat.zero


zero
SurjVal.v evr.valtn x = ofN (Nat.zero - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN Nat.zero


zero
SurjVal.v evr.valtn x = ofN (Nat.zero - 1)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


SurjVal.v evr.valtn (decr_val evr x) = ofN (m - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


succ
SurjVal.v evr.valtn (decr_val evr x) = ofN (Nat.succ m - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


succ
SurjVal.v evr.valtn (decr_val evr x) = ofN (Nat.succ m - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


SurjVal.v evr.valtn x > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


SurjVal.v evr.valtn x > ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


SurjVal.v evr.valtn x > ofN 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


succ
SurjVal.v evr.valtn (decr_val evr x) = ofN (Nat.succ m - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1) + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)


succ
SurjVal.v evr.valtn (decr_val evr x) = ofN (Nat.succ m - 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1) + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1 + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1) + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + SurjVal.v evr.valtn p = ofN (Nat.succ m - 1 + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1) + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x * p) = ofN (Nat.succ m - 1 + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1) + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (p * decr_val evr x) = ofN (Nat.succ m - 1 + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1) + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn x = ofN (Nat.succ m - 1 + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn (decr_val evr x) + ofN 1 = ofN (Nat.succ m - 1) + ofN 1
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn x = ofN (m + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

x_pos_val: SurjVal.v evr.valtn x > ofN 0


succ.a
SurjVal.v evr.valtn x = ofN (m + 1)
lemma
sub_val_decr_val_comm: βˆ€ {p : R} (evr : EnatValRing p) (x : R) (n : β„•), sub_val evr (decr_val evr x) n = decr_val evr (sub_val evr x n)
sub_val_decr_val_comm
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.16792} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.16792
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (n :
β„•: Type
β„•
) :
sub_val: {R : Type ?u.16805} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (evr.
decr_val: {R : Type ?u.16815} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
x: R
x
) n = evr.
decr_val: {R : Type ?u.16819} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ R β†’ R
decr_val
(
sub_val: {R : Type ?u.16823} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n) :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (decr_val evr x) n = decr_val evr (sub_val evr x n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (decr_val evr x) n = decr_val evr (sub_val evr x n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero
βˆ€ (a : R), sub_val evr (decr_val evr a) Nat.zero = decr_val evr (sub_val evr a Nat.zero)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)


succ
βˆ€ (a : R), sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R


succ
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)


succ
βˆ€ (a : R), sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

x✝: SurjVal.v evr.valtn a = ofN 0 ∨ SurjVal.v evr.valtn a > ofN 0


succ
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a = ofN 0


succ.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a = ofN 0


succ.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a = ofN 0


succ.inl
sub_val evr a (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a = ofN 0


succ.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a = ofN 0


succ.inl
a = decr_val evr a
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a = ofN 0


succ.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a = ofN 0


succ.inl
a = a

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

x✝: SurjVal.v evr.valtn a = ofN 0 ∨ SurjVal.v evr.valtn a > ofN 0


succ
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0


succ.inr
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

x✝: SurjVal.v evr.valtn (decr_val evr a) = ofN 0 ∨ SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
decr_val evr a = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
decr_val evr a = decr_val evr (sub_val evr (decr_val evr a) n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
decr_val evr a = sub_val evr (decr_val evr (decr_val evr a)) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
decr_val evr a = sub_val evr (decr_val evr a) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) = ofN 0


succ.inr.inl
decr_val evr a = decr_val evr a

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

x✝: SurjVal.v evr.valtn (decr_val evr a) = ofN 0 ∨ SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr.inr
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr.inr
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr.inr
sub_val evr (decr_val evr (decr_val evr a)) n = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr.inr
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr.inr
decr_val evr (sub_val evr (decr_val evr a) n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr.inr
sub_val evr (decr_val evr a) (Nat.succ n) = decr_val evr (sub_val evr a (Nat.succ n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: βˆ€ (a : R), sub_val evr (decr_val evr a) n = decr_val evr (sub_val evr a n)

a: R

h: SurjVal.v evr.valtn a > ofN 0

h': SurjVal.v evr.valtn (decr_val evr a) > ofN 0


succ.inr.inr
decr_val evr (sub_val evr (decr_val evr a) n) = decr_val evr (sub_val evr (decr_val evr a) n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (decr_val evr x) n = decr_val evr (sub_val evr x n)

Goals accomplished! πŸ™
lemma
val_sub_val_eq: βˆ€ {R : Type u} [inst : IntegralDomain R] {m : β„•} {p : R} (evr : EnatValRing p) (x : R) (n : β„•), SurjVal.v evr.valtn x = ofN m β†’ SurjVal.v evr.valtn (sub_val evr x n) = ofN (m - n)
val_sub_val_eq
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.17734} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.17734
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (n :
β„•: Type
β„•
) (
h: SurjVal.v evr.valtn x = ofN m
h
: evr.
valtn: {R : Type ?u.17744} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.17748} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
= ofN
m: ?m.17729
m
) : evr.
valtn: {R : Type ?u.17756} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.17760} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
sub_val: {R : Type ?u.17764} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n) = ofN (
m: ?m.17729
m
- n) :=
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN m


SurjVal.v evr.valtn (sub_val evr x n) = ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN m


SurjVal.v evr.valtn (sub_val evr x n) = ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


zero
SurjVal.v evr.valtn (sub_val evr x Nat.zero) = ofN (m - Nat.zero)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


zero
SurjVal.v evr.valtn (sub_val evr x Nat.zero) = ofN (m - Nat.zero)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


zero
SurjVal.v evr.valtn x = ofN (m - Nat.zero)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


zero
SurjVal.v evr.valtn (sub_val evr x Nat.zero) = ofN (m - Nat.zero)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


zero
SurjVal.v evr.valtn x = ofN m
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m


zero
SurjVal.v evr.valtn x = ofN m
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN m


SurjVal.v evr.valtn (sub_val evr x n) = ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m

n: β„•

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (m - n)


succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m

n: β„•

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (m - n)


succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.zero - n)


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.zero - n)


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.zero - n)


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn x = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN 0


succ.zero
SurjVal.v evr.valtn x = ofN 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x = ofN Nat.zero

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.zero - n)


succ.zero
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.zero - Nat.succ n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x = ofN m

n: β„•

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (m - n)


succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr (decr_val evr x) n) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (decr_val evr (sub_val evr x n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
Nat.succ m - n - 1 = Nat.succ m - (n + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
Nat.succ m - (n + 1) = Nat.succ m - (n + 1)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

h: SurjVal.v evr.valtn x = ofN (Nat.succ m)

ih: SurjVal.v evr.valtn (sub_val evr x n) = ofN (Nat.succ m - n)


succ.succ
SurjVal.v evr.valtn (sub_val evr x (Nat.succ n)) = ofN (Nat.succ m - Nat.succ n)

Goals accomplished! πŸ™
lemma
val_sub_val_le: βˆ€ {R : Type u} [inst : IntegralDomain R] {m : β„•} {p : R} (evr : EnatValRing p) (x : R) (n : β„•), SurjVal.v evr.valtn x β‰₯ ofN m β†’ SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
val_sub_val_le
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.18472} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.18472
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (n :
β„•: Type
β„•
) (
h: SurjVal.v evr.valtn x β‰₯ ofN m
h
: evr.
valtn: {R : Type ?u.18482} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.18486} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN
m: ?m.18467
m
) : evr.
valtn: {R : Type ?u.18498} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.18502} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
sub_val: {R : Type ?u.18506} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n) β‰₯ ofN (
m: ?m.18467
m
- n) :=
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m


SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

x✝: SurjVal.v evr.valtn x = ∞ ∨ βˆƒ n, SurjVal.v evr.valtn x = ofN n


SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞


inl
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞


inl
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
SurjVal.v evr.valtn (sub_val evr 0 n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
SurjVal.v evr.valtn 0 β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞

topcase: x = 0


inl
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': SurjVal.v evr.valtn x = ∞


inl
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

x✝: SurjVal.v evr.valtn x = ∞ ∨ βˆƒ n, SurjVal.v evr.valtn x = ofN n


SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


inr
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


inr
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


βˆ€ (a : β„•), SurjVal.v evr.valtn x = ofN a β†’ SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

ha: SurjVal.v evr.valtn x = ofN a


SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


βˆ€ (a : β„•), SurjVal.v evr.valtn x = ofN a β†’ SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


βˆ€ (a : β„•), SurjVal.v evr.valtn x = ofN a β†’ SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


ofN (a - n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


ofN (a - n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


βˆ€ (a : β„•), SurjVal.v evr.valtn x = ofN a β†’ SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


m - n ≀ a - n
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


βˆ€ (a : β„•), SurjVal.v evr.valtn x = ofN a β†’ SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


m - n ≀ a - n
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

h: ofN a β‰₯ ofN m

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


m - n ≀ a - n
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

h: ofN a β‰₯ ofN m

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


m - n ≀ a - n
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n

a: β„•

h: ofN a β‰₯ ofN m

ha: SurjVal.v evr.valtn x = ofN a

h'': SurjVal.v evr.valtn (sub_val evr x n) = ofN (a - n)


m - n ≀ a - n
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


βˆ€ (a : β„•), SurjVal.v evr.valtn x = ofN a β†’ SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

m: β„•

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN m

h': βˆƒ n, SurjVal.v evr.valtn x = ofN n


inr
SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (m - n)

Goals accomplished! πŸ™
lemma
factor_p_of_le_val: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) {x : R} {n : β„•}, SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n
factor_p_of_le_val
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.19029} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.19029
EnatValRing
p: R
p
) {
x: R
x
:
R: Type u
R
} {n :
β„•: Type
β„•
} (
h: SurjVal.v evr.valtn x β‰₯ ofN n
h
: evr.
valtn: {R : Type ?u.19042} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.19049} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN n) :
x: R
x
=
p: R
p
^ n *
sub_val: {R : Type ?u.19070} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN n


x = p ^ n * sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN n


x = p ^ n * sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

h: SurjVal.v evr.valtn x β‰₯ ofN Nat.zero


zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

h: SurjVal.v evr.valtn x β‰₯ ofN n


x = p ^ n * sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr (decr_val evr x) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * decr_val evr (sub_val evr x n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ n * p * decr_val evr (sub_val evr x n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ n * (p * decr_val evr (sub_val evr x n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ n * (p * decr_val evr (sub_val evr x n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ n * (p * decr_val evr (sub_val evr x n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

h': SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (Nat.succ n - n)


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

h': SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (Nat.succ n - n)


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

h': SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (n + 1 - n)


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

h': SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN (Nat.succ n - n)


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

h': SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN 1


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

h': SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN 1


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

h': SurjVal.v evr.valtn (sub_val evr x n) β‰₯ ofN 1


SurjVal.v evr.valtn (sub_val evr x n) > 0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


SurjVal.v evr.valtn (sub_val evr x n) > 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

pos_val: SurjVal.v evr.valtn (sub_val evr x n) > 0


succ
x = p ^ n * (p * decr_val evr (sub_val evr x n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

pos_val: SurjVal.v evr.valtn (sub_val evr x n) > 0


succ
x = p ^ n * sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

pos_val: SurjVal.v evr.valtn (sub_val evr x n) > 0


succ
x = p ^ n * sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)

pos_val: SurjVal.v evr.valtn (sub_val evr x n) > 0


succ
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h
SurjVal.v evr.valtn x β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h.h
0 < SurjVal.v evr.valtn x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ.h.h
0 < SurjVal.v evr.valtn x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ succ (ofN n)


succ.h.h
0 < SurjVal.v evr.valtn x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ succ (ofN n)


succ.h.h
0 < SurjVal.v evr.valtn x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ succ (ofN n)


succ.h.h
0 < SurjVal.v evr.valtn x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n

h: SurjVal.v evr.valtn x β‰₯ ofN (Nat.succ n)


succ
x = p ^ Nat.succ n * sub_val evr x (Nat.succ n)

Goals accomplished! πŸ™
lemma
factor_p_of_eq_val: βˆ€ {p : R} (evr : EnatValRing p) {x : R} {n : β„•}, SurjVal.v evr.valtn x = ofN n β†’ x = p ^ n * sub_val evr x n
factor_p_of_eq_val
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.20229} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.20229
EnatValRing
p: R
p
) {
x: R
x
:
R: Type u
R
} {n :
β„•: Type
β„•
} (
h: SurjVal.v evr.valtn x = ofN n
h
: evr.
valtn: {R : Type ?u.20242} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.20249} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
= ofN n) :
x: R
x
=
p: R
p
^ n *
sub_val: {R : Type ?u.20266} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n :=
factor_p_of_le_val: βˆ€ {R : Type ?u.20486} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) {x : R} {n : β„•}, SurjVal.v evr.valtn x β‰₯ ofN n β†’ x = p ^ n * sub_val evr x n
factor_p_of_le_val
evr (
le_of_eq: βˆ€ {Ξ± : Type ?u.20516} [inst : Preorder Ξ±] {a b : Ξ±}, a = b β†’ a ≀ b
le_of_eq
(
Eq.symm: βˆ€ {Ξ± : Sort ?u.20527} {a b : Ξ±}, a = b β†’ b = a
Eq.symm
h: SurjVal.v evr.valtn x = ofN n
h
)) lemma
sub_val_p_mul: βˆ€ {p : R} (evr : EnatValRing p) (x : R) (n : β„•), sub_val evr (p ^ n * x) n = x
sub_val_p_mul
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.20549} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.20549
EnatValRing
p: R
p
) (
x: R
x
:
R: Type u
R
) (n :
β„•: Type
β„•
) :
sub_val: {R : Type ?u.20562} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
p: R
p
^ n *
x: R
x
) n =
x: R
x
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (p ^ n * x) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (p ^ n * x) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero
sub_val evr (1 * x) Nat.zero = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (p ^ n * x) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (decr_val evr (p ^ Nat.succ n * x)) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h
SurjVal.v evr.valtn (p ^ Nat.succ n * x) β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (decr_val evr (p * p ^ n * x)) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h
SurjVal.v evr.valtn (p ^ Nat.succ n * x) β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (decr_val evr (p * (p ^ n * x))) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h
SurjVal.v evr.valtn (p ^ Nat.succ n * x) β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ n * x) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h
SurjVal.v evr.valtn (p ^ Nat.succ n * x) β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ n * x) n = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h
SurjVal.v evr.valtn (p ^ Nat.succ n * x) β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h
SurjVal.v evr.valtn (p ^ Nat.succ n * x) β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h
0 < SurjVal.v evr.valtn (p ^ Nat.succ n * x)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
succ (ofN Nat.zero) ≀ SurjVal.v evr.valtn (p * p ^ n * x)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
succ (ofN Nat.zero) ≀ SurjVal.v evr.valtn (p * (p ^ n * x))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
ofN (Nat.succ Nat.zero) ≀ SurjVal.v evr.valtn (p * (p ^ n * x))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
SurjVal.v evr.valtn p ≀ SurjVal.v evr.valtn (p * (p ^ n * x))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ.h.h.h
SurjVal.v evr.valtn p ≀ SurjVal.v evr.valtn (p * (p ^ n * x))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (p ^ n * x) n = x


succ
sub_val evr (p ^ Nat.succ n * x) (Nat.succ n) = x

Goals accomplished! πŸ™
lemma
sub_val_neg: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) {x : R} {n : β„•}, sub_val evr (-x) n = -sub_val evr x n
sub_val_neg
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.21467} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.21467
EnatValRing
p: R
p
) {
x: R
x
:
R: Type u
R
} {n :
β„•: Type
β„•
} :
sub_val: {R : Type ?u.21480} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (-
x: R
x
) n = -
sub_val: {R : Type ?u.21515} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (-x) n = -sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (-x) n = -sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R


zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


sub_val evr (-x) n = -sub_val evr x n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n


succ
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

x✝: SurjVal.v evr.valtn x = ofN 0 ∨ SurjVal.v evr.valtn x > ofN 0


succ
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0


succ.inl
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0


succ.inl
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0


SurjVal.v evr.valtn (-x) = ofN 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0


succ.inl
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0

h'm: SurjVal.v evr.valtn (-x) = ofN 0


succ.inl
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0

h'm: SurjVal.v evr.valtn (-x) = ofN 0


succ.inl
sub_val evr (-x) (Nat.succ n) = -x
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0

h'm: SurjVal.v evr.valtn (-x) = ofN 0


succ.inl
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x = ofN 0

h'm: SurjVal.v evr.valtn (-x) = ofN 0


succ.inl
-x = -x

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

x✝: SurjVal.v evr.valtn x = ofN 0 ∨ SurjVal.v evr.valtn x > ofN 0


succ
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0


SurjVal.v evr.valtn (-x) > ofN 0

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr (decr_val evr x) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (decr_val evr (-x)) n = -sub_val evr (decr_val evr x) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
decr_val evr (sub_val evr (-x) n) = -sub_val evr (decr_val evr x) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
decr_val evr (-sub_val evr x n) = -sub_val evr (decr_val evr x) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
-decr_val evr (sub_val evr x n) = -sub_val evr (decr_val evr x) n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
sub_val evr (-x) (Nat.succ n) = -sub_val evr x (Nat.succ n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

ih: sub_val evr (-x) n = -sub_val evr x n

h': SurjVal.v evr.valtn x > ofN 0

h'm: SurjVal.v evr.valtn (-x) > ofN 0


succ.inr
-decr_val evr (sub_val evr x n) = -decr_val evr (sub_val evr x n)

Goals accomplished! πŸ™
lemma
sub_val_add: βˆ€ {p : R} (evr : EnatValRing p) {x y : R} {n : β„•}, SurjVal.v evr.valtn x β‰₯ ofN n β†’ SurjVal.v evr.valtn y β‰₯ ofN n β†’ sub_val evr (x + y) n = sub_val evr x n + sub_val evr y n
sub_val_add
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.22264} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.22264
EnatValRing
p: R
p
) {
x: R
x
y: R
y
:
R: Type u
R
} {n :
β„•: Type
β„•
} (
hx: SurjVal.v evr.valtn x β‰₯ ofN n
hx
: evr.
valtn: {R : Type ?u.22279} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.22286} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN n) (
hy: SurjVal.v evr.valtn y β‰₯ ofN n
hy
: evr.
valtn: {R : Type ?u.22301} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.22305} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
y: R
y
β‰₯ ofN n) :
sub_val: {R : Type ?u.22314} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
x: R
x
+
y: R
y
) n =
sub_val: {R : Type ?u.22421} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n +
sub_val: {R : Type ?u.22428} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
y: R
y
n :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x + y) n = sub_val evr x n + sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x + y) n = sub_val evr x n + sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x + y) n = sub_val evr x n + sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
x + y = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (x + y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
x + y = p ^ n * sub_val evr x n + p ^ n * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (x + y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
x + y = x + p ^ n * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (x + y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
x + y = x + y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (x + y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (x + y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


a
p ^ n * sub_val evr (x + y) n = p ^ n * (sub_val evr x n + sub_val evr y n)

Goals accomplished! πŸ™
lemma
sub_val_sub: βˆ€ {p : R} (evr : EnatValRing p) {x y : R} {n : β„•}, SurjVal.v evr.valtn x β‰₯ ofN n β†’ SurjVal.v evr.valtn y β‰₯ ofN n β†’ sub_val evr (x - y) n = sub_val evr x n - sub_val evr y n
sub_val_sub
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.22932} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.22932
EnatValRing
p: R
p
) {
x: R
x
y: R
y
:
R: Type u
R
} {n :
β„•: Type
β„•
} (
hx: SurjVal.v evr.valtn x β‰₯ ofN n
hx
: evr.
valtn: {R : Type ?u.22947} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.22954} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN n) (
hy: SurjVal.v evr.valtn y β‰₯ ofN n
hy
: evr.
valtn: {R : Type ?u.22969} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.22973} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
y: R
y
β‰₯ ofN n) :
sub_val: {R : Type ?u.22982} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
x: R
x
-
y: R
y
) n =
sub_val: {R : Type ?u.23053} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n -
sub_val: {R : Type ?u.23060} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
y: R
y
n :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x - y) n = sub_val evr x n - sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x - y) n = sub_val evr x n - sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x + -y) n = sub_val evr x n - sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x - y) n = sub_val evr x n - sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x + -y) n = sub_val evr x n + -sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x - y) n = sub_val evr x n - sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr x n + sub_val evr (-y) n = sub_val evr x n + -sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (-y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x - y) n = sub_val evr x n - sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr x n + -sub_val evr y n = sub_val evr x n + -sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (-y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


SurjVal.v evr.valtn (-y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x - y) n = sub_val evr x n - sub_val evr y n

Goals accomplished! πŸ™
lemma
sub_val_mul_left: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) {x y : R} {n : β„•}, SurjVal.v evr.valtn x β‰₯ ofN n β†’ sub_val evr (x * y) n = sub_val evr x n * y
sub_val_mul_left
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.23625} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.23625
EnatValRing
p: R
p
) {
x: R
x
y: R
y
:
R: Type u
R
} {n :
β„•: Type
β„•
} (
hx: SurjVal.v evr.valtn x β‰₯ ofN n
hx
: evr.
valtn: {R : Type ?u.23640} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.23647} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN n) :
sub_val: {R : Type ?u.23662} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
x: R
x
*
y: R
y
) n =
sub_val: {R : Type ?u.23765} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n *
y: R
y
:=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


sub_val evr (x * y) n = sub_val evr x n * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


sub_val evr (x * y) n = sub_val evr x n * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n β‰  0
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


sub_val evr (x * y) n = sub_val evr x n * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
x * y = p ^ n * (sub_val evr x n * y)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


SurjVal.v evr.valtn (x * y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
x * y = p ^ n * sub_val evr x n * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


SurjVal.v evr.valtn (x * y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
x * y = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


SurjVal.v evr.valtn (x * y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


SurjVal.v evr.valtn (x * y) β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n


a
p ^ n * sub_val evr (x * y) n = p ^ n * (sub_val evr x n * y)

Goals accomplished! πŸ™
lemma
sub_val_mul_right: βˆ€ {p : R} (evr : EnatValRing p) {x y : R} {n : β„•}, SurjVal.v evr.valtn y β‰₯ ofN n β†’ sub_val evr (x * y) n = x * sub_val evr y n
sub_val_mul_right
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.24269} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.24269
EnatValRing
p: R
p
) {
x: R
x
y: R
y
:
R: Type u
R
} {n :
β„•: Type
β„•
} (
hy: SurjVal.v evr.valtn y β‰₯ ofN n
hy
: evr.
valtn: {R : Type ?u.24284} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.24291} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
y: R
y
β‰₯ ofN n) :
sub_val: {R : Type ?u.24306} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
x: R
x
*
y: R
y
) n =
x: R
x
*
sub_val: {R : Type ?u.24409} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
y: R
y
n :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x * y) n = x * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x * y) n = x * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (y * x) n = x * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x * y) n = x * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr y n * x = x * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hy: SurjVal.v evr.valtn y β‰₯ ofN n


sub_val evr (x * y) n = x * sub_val evr y n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n: β„•

hy: SurjVal.v evr.valtn y β‰₯ ofN n


x * sub_val evr y n = x * sub_val evr y n

Goals accomplished! πŸ™
lemma
sub_val_mul_sub_val: βˆ€ {p : R} (evr : EnatValRing p) {x y : R} (n m : β„•), SurjVal.v evr.valtn x β‰₯ ofN n β†’ SurjVal.v evr.valtn y β‰₯ ofN m β†’ sub_val evr x n * sub_val evr y m = sub_val evr (x * y) (n + m)
sub_val_mul_sub_val
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.24592} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.24592
EnatValRing
p: R
p
) {
x: R
x
y: R
y
:
R: Type u
R
} (n m :
β„•: Type
β„•
) (
hx: SurjVal.v evr.valtn x β‰₯ ofN n
hx
: evr.
valtn: {R : Type ?u.24609} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.24616} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN n) (
hy: SurjVal.v evr.valtn y β‰₯ ofN m
hy
: evr.
valtn: {R : Type ?u.24631} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.24635} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
y: R
y
β‰₯ ofN m) :
sub_val: {R : Type ?u.24647} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n *
sub_val: {R : Type ?u.24654} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
y: R
y
m =
sub_val: {R : Type ?u.24661} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
x: R
x
*
y: R
y
) (n + m) :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr x n * sub_val evr y m = sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr x n * sub_val evr y m = sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ n * p ^ m * (sub_val evr x n * sub_val evr y m) = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ n * (p ^ m * (sub_val evr x n * sub_val evr y m)) = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ n * (sub_val evr x n * sub_val evr y m * p ^ m) = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ n * (sub_val evr x n * sub_val evr y m) * p ^ m = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ n * sub_val evr x n * sub_val evr y m * p ^ m = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


x * sub_val evr y m * p ^ m = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


x * (sub_val evr y m * p ^ m) = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


x * (p ^ m * sub_val evr y m) = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


p ^ (n + m) * (sub_val evr x n * sub_val evr y m) = p ^ (n + m) * sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


x * y = x * y
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn y β‰₯ ofN m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn y β‰₯ ofN m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr x n * sub_val evr y m = sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn y β‰₯ ofN m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn y β‰₯ ofN m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr x n * sub_val evr y m = sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr x n * sub_val evr y m = sub_val evr (x * y) (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x + SurjVal.v evr.valtn y β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x + SurjVal.v evr.valtn y β‰₯ ofN n + ofN m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn x + SurjVal.v evr.valtn y β‰₯ ofN n + ofN m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


SurjVal.v evr.valtn (x * y) β‰₯ ofN (n + m)

Goals accomplished! πŸ™
lemma
sub_val_mul: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) {x y : R} (n m : β„•) {nm : β„•}, n + m = nm β†’ SurjVal.v evr.valtn x β‰₯ ofN n β†’ SurjVal.v evr.valtn y β‰₯ ofN m β†’ sub_val evr (x * y) nm = sub_val evr x n * sub_val evr y m
sub_val_mul
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.25874} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.25874
EnatValRing
p: R
p
) {
x: R
x
y: R
y
:
R: Type u
R
} (n m :
β„•: Type
β„•
) {
nm: β„•
nm
:
β„•: Type
β„•
} (
h: n + m = nm
h
: n + m =
nm: β„•
nm
) (
hx: SurjVal.v evr.valtn x β‰₯ ofN n
hx
: evr.
valtn: {R : Type ?u.25937} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.25944} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN n) (
hy: SurjVal.v evr.valtn y β‰₯ ofN m
hy
: evr.
valtn: {R : Type ?u.25959} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.25963} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
y: R
y
β‰₯ ofN m) :
sub_val: {R : Type ?u.25972} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
x: R
x
*
y: R
y
)
nm: β„•
nm
=
sub_val: {R : Type ?u.26075} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n *
sub_val: {R : Type ?u.26082} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
y: R
y
m :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m, nm: β„•

h: n + m = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr (x * y) nm = sub_val evr x n * sub_val evr y m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m, nm: β„•

h: n + m = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr (x * y) nm = sub_val evr x n * sub_val evr y m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m, nm: β„•

h: n + m = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr (x * y) (n + m) = sub_val evr x n * sub_val evr y m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m, nm: β„•

h: n + m = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr (x * y) nm = sub_val evr x n * sub_val evr y m
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x, y: R

n, m, nm: β„•

h: n + m = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n

hy: SurjVal.v evr.valtn y β‰₯ ofN m


sub_val evr (x * y) (n + m) = sub_val evr (x * y) (n + m)

Goals accomplished! πŸ™
lemma
sub_val_pow: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) {x : R} (n k : β„•) {nm : β„•}, k * n = nm β†’ SurjVal.v evr.valtn x β‰₯ ofN n β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k
sub_val_pow
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.26211} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.26211
EnatValRing
p: R
p
) {
x: R
x
:
R: Type u
R
} (n k :
β„•: Type
β„•
) {
nm: β„•
nm
:
β„•: Type
β„•
} (
h: k * n = nm
h
: k * n =
nm: β„•
nm
) (
hx: SurjVal.v evr.valtn x β‰₯ ofN n
hx
: evr.
valtn: {R : Type ?u.26276} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.26283} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
x: R
x
β‰₯ ofN n) :
sub_val: {R : Type ?u.26298} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
x: R
x
^ k)
nm: β„•
nm
=
sub_val: {R : Type ?u.26438} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
n ^ k :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, k, nm: β„•

h: k * n = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n


sub_val evr (x ^ k) nm = sub_val evr x n ^ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, k, nm: β„•

h: k * n = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n


sub_val evr (x ^ k) nm = sub_val evr x n ^ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

nm: β„•

h: Nat.zero * n = nm


zero
sub_val evr (x ^ Nat.zero) nm = sub_val evr x n ^ Nat.zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, k, nm: β„•

h: k * n = nm

hx: SurjVal.v evr.valtn x β‰₯ ofN n


sub_val evr (x ^ k) nm = sub_val evr x n ^ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x * x ^ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr x n * sub_val evr (x ^ k) (k * n) = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr x n * sub_val evr (x ^ k) (k * n) = sub_val evr x n * sub_val evr x n ^ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr x n * sub_val evr (x ^ k) (k * n) = sub_val evr x n * sub_val evr (x ^ k) ?m.26951
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
k * n = ?m.26951
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
k * n = k * n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = Nat.succ k * n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = k * n + n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
n + k * n = nm
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.h
k * n + n = k * n + n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hx
SurjVal.v evr.valtn x β‰₯ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ.hy
SurjVal.v evr.valtn (x ^ k) β‰₯ ofN (k * n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


e_b
ofN (k * n) = k β€’ ofN n
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•

hx: SurjVal.v evr.valtn x β‰₯ ofN n

k: β„•

ih: βˆ€ {nm : β„•}, k * n = nm β†’ sub_val evr (x ^ k) nm = sub_val evr x n ^ k

nm: β„•

h: Nat.succ k * n = nm


succ
sub_val evr (x ^ Nat.succ k) nm = sub_val evr x n ^ Nat.succ k

Goals accomplished! πŸ™
lemma
sub_val_sub_val: βˆ€ {R : Type u} [inst : IntegralDomain R] {p : R} (evr : EnatValRing p) {x : R} {m n : β„•}, sub_val evr (sub_val evr x m) n = sub_val evr x (m + n)
sub_val_sub_val
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.27271} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.27271
EnatValRing
p: R
p
) {
x: R
x
:
R: Type u
R
} {m n :
β„•: Type
β„•
} :
sub_val: {R : Type ?u.27286} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr (
sub_val: {R : Type ?u.27296} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
m) n =
sub_val: {R : Type ?u.27300} β†’ [inst : IntegralDomain R] β†’ {p : R} β†’ EnatValRing p β†’ R β†’ β„• β†’ R
sub_val
evr
x: R
x
(m + n) :=
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m, n: β„•


sub_val evr (sub_val evr x m) n = sub_val evr x (m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m, n: β„•


sub_val evr (sub_val evr x m) n = sub_val evr x (m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m, n: β„•


βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m, n: β„•


βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n: β„•


zero
βˆ€ (y : R), sub_val evr (sub_val evr y Nat.zero) n = sub_val evr y (Nat.zero + n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m, n: β„•


βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)


succ
βˆ€ (y : R), sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R


succ
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)


succ
βˆ€ (y : R), sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

x✝: SurjVal.v evr.valtn y = ofN 0 ∨ SurjVal.v evr.valtn y > ofN 0


succ
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y = ofN 0


succ.inl
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

x✝: SurjVal.v evr.valtn y = ofN 0 ∨ SurjVal.v evr.valtn y > ofN 0


succ
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr (decr_val evr y) m) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr (decr_val evr y) m) n = sub_val evr y (Nat.succ (m + n))
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr (decr_val evr y) m) n = sub_val evr (decr_val evr y) (m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr (decr_val evr y) m) n = sub_val evr (decr_val evr y) (m + n)
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

n, m: β„•

ih: βˆ€ (y : R), sub_val evr (sub_val evr y m) n = sub_val evr y (m + n)

y: R

h': SurjVal.v evr.valtn y > ofN 0


succ.inr
sub_val evr (sub_val evr y (Nat.succ m)) n = sub_val evr y (Nat.succ m + n)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: R

evr: EnatValRing p

x: R

m, n: β„•


sub_val evr (sub_val evr x m) n = sub_val evr x (m + n)

Goals accomplished! πŸ™
def
has_double_root: {p : R} β†’ (evr : EnatValRing p) β†’ (a b c : R) β†’ ?m.27986 evr a b c
has_double_root
{
p: R
p
:
R: Type u
R
} (evr :
EnatValRing: {R : Type ?u.27971} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.27971
EnatValRing
p: R
p
) (
a: R
a
b: R
b
c: R
c
:
R: Type u
R
) := evr.
valtn: {R : Type ?u.28007} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.28011} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
a: R
a
=
0: ?m.28019
0
∧ evr.
valtn: {R : Type ?u.28249} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.28253} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
(
b: R
b
^
2: ?m.28264
2
-
4: ?m.28280
4
*
a: R
a
*
c: R
c
) >
0: ?m.28593
0
end EnatValRing def
nat_prime: β„• β†’ Prop
nat_prime
(p :
β„•: Type
β„•
) :
Prop: Type
Prop
:=
1: ?m.28888
1
< p ∧ (βˆ€ a b :
β„•: Type
β„•
, (a * b) % p =
0: ?m.28935
0
β†’ a % p =
0: ?m.29033
0
∨ b % p =
0: ?m.29072
0
) lemma
ndiv_mul_left: βˆ€ (a b p : β„•), a * b % p β‰  0 β†’ a % p β‰  0
ndiv_mul_left
(a b p :
β„•: Type
β„•
) : (a * b) % p β‰ 
0: ?m.29211
0
β†’ a % p β‰ 
0: ?m.29246
0
:=
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


a * b % p β‰  0 β†’ a % p β‰  0
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•

hab: a * b % p β‰  0

ha: a % p = 0


R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


a * b % p β‰  0 β†’ a % p β‰  0
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•

hab: a * b % p β‰  0

ha: a % p = 0


a * b % p = 0
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


a * b % p β‰  0 β†’ a % p β‰  0

Goals accomplished! πŸ™
lemma
ndiv_mul_right: βˆ€ (a b p : β„•), a * b % p β‰  0 β†’ b % p β‰  0
ndiv_mul_right
(a b p :
β„•: Type
β„•
) : (a * b) % p β‰ 
0: ?m.29510
0
β†’ b % p β‰ 
0: ?m.29545
0
:=
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


a * b % p β‰  0 β†’ b % p β‰  0
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


a * b % p β‰  0 β†’ b % p β‰  0
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


b * a % p β‰  0 β†’ b % p β‰  0
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


b * a % p β‰  0 β†’ b % p β‰  0
R: Type u

inst✝: IntegralDomain R

a, b, p: β„•


a * b % p β‰  0 β†’ b % p β‰  0

Goals accomplished! πŸ™
lemma
nat_prime_test: βˆ€ (p : β„•), nat_prime p ↔ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
nat_prime_test
(p :
β„•: Type
β„•
) :
nat_prime: β„• β†’ Prop
nat_prime
p ↔ (
1: ?m.29598
1
< p ∧ (βˆ€ a b :
β„•: Type
β„•
, a < p β†’ b < p β†’ (a * b) % p =
0: ?m.29655
0
β†’ a % p =
0: ?m.29753
0
∨ b % p =
0: ?m.29792
0
)) :=
R: Type u

inst✝: IntegralDomain R

p: β„•


nat_prime p ↔ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mp
nat_prime p β†’ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•


nat_prime p ↔ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mp
nat_prime p β†’ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mp
nat_prime p β†’ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: nat_prime p


mp
1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mp
nat_prime p β†’ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: nat_prime p


mp
βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mp
nat_prime p β†’ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: nat_prime p

a, b: β„•

a✝¹: a < p

a✝: b < p


mp
a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mp
nat_prime p β†’ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•


nat_prime p ↔ 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0


mpr
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0


mpr
βˆ€ (a b : β„•), a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a * b % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a * b % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0

h: a % p % p = 0 ∨ b % p % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0

h: a % p % p = 0 ∨ b % p % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•


mpr
(1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0) β†’ nat_prime p
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0

h: a % p % p = 0 ∨ b % p % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0

h: a % p = 0 ∨ b % p % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0

h: a % p % p = 0 ∨ b % p % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0

h: a % p = 0 ∨ b % p = 0


mpr
a % p = 0 ∨ b % p = 0
R: Type u

inst✝: IntegralDomain R

p: β„•

H: 1 < p ∧ βˆ€ (a b : β„•), a < p β†’ b < p β†’ a * b % p = 0 β†’ a % p = 0 ∨ b % p = 0

a, b: β„•

p_div_ab: a % p * (b % p) % p = 0

p_pos: p > 0

h: a % p = 0 ∨ b % p = 0


mpr
a % p = 0 ∨ b % p = 0

Goals accomplished! πŸ™
Warning: declaration uses 'sorry'
:
DecidablePred: {Ξ± : Sort ?u.30118} β†’ (Ξ± β†’ Prop) β†’ Sort (max 1 ?u.30118)
DecidablePred
(
nat_prime: β„• β†’ Prop
nat_prime
. :
β„•: Type
β„•
β†’
Prop: Type
Prop
) := fun
p: ?m.30132
p
=>
sorry: ?m.30135
sorry
--match p with --| 0 => sorry --isFalse (not_and_of_not_left _ (not_lt_of_ge (le_of_lt Nat.zero_lt_one))) --| 1 => isFalse (not_and_of_not_left _ (not_lt_of_ge (le_of_eq rfl))) --| Nat.succ (Nat.succ p') => sorry --def fmul_eq_addf {R R' : Type u} [Mul R] [Add R'] (f : R β†’ R') (x y : R) : Prop := f (x * y) = f x + f y namespace Int def
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
:
β„•: Type
β„•
β†’
β„•: Type
β„•
β†’
β„•βˆͺ∞: Type
β„•βˆͺ∞
| _, 0 => ∞ | 0, (_+1) => ofN
0: ?m.30286
0
| 1, (_+1) => ∞ | (q+2), (m+1) => if (m+
1: ?m.30467
1
) % (q+
2: ?m.30481
2
) β‰ 
0: ?m.30573
0
then ofN
0: ?m.30580
0
else succ (
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
(q+
2: ?m.30586
2
) ((m+
1: ?m.30631
1
) / (q+
2: ?m.30645
2
))) termination_by nat_valuation p k => k decreasing_by
q, m: β„•

h✝: Β¬(m + 1) % (q + 2) β‰  0


(m + 1) / (q + 2) < Nat.succ m
q, m: β„•

h✝: Β¬(m + 1) % (q + 2) β‰  0


(invImage (fun a => PSigma.casesOn a fun p snd => snd) instWellFoundedRelation).1 { fst := q + 2, snd := (m + 1) / (q + 2) } { fst := Nat.succ (Nat.succ q), snd := Nat.succ m }

Goals accomplished! πŸ™
lemma
nat_val_zero: βˆ€ (p : β„•), nat_valuation p 0 = ∞
nat_val_zero
(p :
β„•: Type
β„•
) :
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p
0: ?m.32225
0
= ∞ :=
R: Type u

inst✝: IntegralDomain R

p: β„•



Goals accomplished! πŸ™
lemma
nat_val_succ: βˆ€ (q m : β„•), nat_valuation (q + 2) (m + 1) = if (m + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((m + 1) / (q + 2)))
nat_val_succ
(q m :
β„•: Type
β„•
) :
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
(q+
2: ?m.45419
2
) (m+
1: ?m.45473
1
) = if (m+
1: ?m.45534
1
) % (q+
2: ?m.45548
2
) β‰ 
0: ?m.45640
0
then ofN
0: ?m.45651
0
else succ (
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
(q+
2: ?m.45657
2
) ((m+
1: ?m.45702
1
) / (q+
2: ?m.45716
2
))) :=
R: Type u

inst✝: IntegralDomain R

q, m: β„•


nat_valuation (q + 2) (m + 1) = if (m + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((m + 1) / (q + 2)))

Goals accomplished! πŸ™
def
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
(p :
β„•: Type
β„•
) (k :
β„€: Type
β„€
) :
β„•βˆͺ∞: Type
β„•βˆͺ∞
:=
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p (
natAbs: β„€ β†’ β„•
natAbs
k) lemma
int_val_uniformizer: βˆ€ {p : β„•}, 1 < p β†’ int_val p ↑p = ofN 1
int_val_uniformizer
{p :
β„•: Type
β„•
} (
gt1: 1 < p
gt1
:
1: ?m.48737
1
< p) :
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p p = ofN
1: ?m.48859
1
:=
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


int_val p ↑p = ofN 1
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


int_val p ↑p = ofN 1
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < 0


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < 0


h
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < 0


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < 0


h
1 < 0
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < 0



Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < Nat.succ 0


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < Nat.succ 0


h
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < Nat.succ 0


R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < Nat.succ 0


h
1 < 1
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < Nat.succ 0



Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


(if (q + 1 + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2)))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


(if 0 β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2)))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (nat_valuation (q + 2) 1) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (if (0 + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((0 + 1) / (q + 2)))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (ofN 0) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
(0 + 1) % (q + 2) β‰  0
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


succ (nat_valuation (q + 2) ((q + 1 + 1) / (q + 2))) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
(0 + 1) % (q + 2) β‰  0
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
(0 + 1) % (q + 2) β‰  0
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
(0 + 1) % (q + 2) β‰  0
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
0 + 1 β‰  0
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
0 + 1 < q + 2
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
0 + 1 β‰  0
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
0 + 1 < q + 2
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


hc
0 + 1 < q + 2
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


0 < q + 1 + 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1
R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


R: Type u

inst✝: IntegralDomain R

p, q: β„•

gt1: 1 < q + 2


nat_valuation (q + 2) (q + 2) = ofN 1

Goals accomplished! πŸ™
lemma
nat_val_mul_eq_add: βˆ€ (p : β„•), nat_prime p β†’ βˆ€ (a b : β„•), nat_valuation p (a * b) = nat_valuation p a + nat_valuation p b
nat_val_mul_eq_add
(p :
β„•: Type
β„•
) (
prime: nat_prime p
prime
:
nat_prime: β„• β†’ Prop
nat_prime
p) (a b :
β„•: Type
β„•
) :
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p (a * b) =
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p a +
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p b :=
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„•


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„•


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•


βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•


βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„•


zero
βˆ€ (c d : β„•), c + d ≀ Nat.zero β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, c, d: β„•

h_sum: c + d ≀ Nat.zero


zero
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„•


zero
βˆ€ (c d : β„•), c + d ≀ Nat.zero β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, c, d: β„•

h_sum: c + d ≀ Nat.zero


zero
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, c, d: β„•

h_sum: c + d ≀ Nat.zero


zero
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, c, d: β„•

h_sum: c + d ≀ Nat.zero


zero
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, c, d: β„•

h_sum: c + d ≀ Nat.zero


zero
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, c, d: β„•

h_sum: c + d ≀ Nat.zero


zero
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„•


zero
βˆ€ (c d : β„•), c + d ≀ Nat.zero β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•


βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d


succ
βˆ€ (c d : β„•), c + d ≀ Nat.succ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: c + d ≀ Nat.succ n


succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d


succ
βˆ€ (c d : β„•), c + d ≀ Nat.succ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: c + d ≀ Nat.succ n


succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

d: β„•

h_sum: Nat.zero + d ≀ Nat.succ n


succ.zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: c + d ≀ Nat.succ n


succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

d, c: β„•

h_sum: Nat.succ c + d ≀ Nat.succ n


succ.succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

d, c: β„•

h_sum: Nat.succ c + d ≀ Nat.succ n


succ.succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c: β„•

h_sum: Nat.succ c + Nat.zero ≀ Nat.succ n


succ.succ.zero

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

d, c: β„•

h_sum: Nat.succ c + d ≀ Nat.succ n


succ.succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n


succ.succ.succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n


succ.succ.succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: Nat.succ 1 + q = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n


succ.succ.succ
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: Nat.succ 1 + q = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: Nat.succ 1 + q = p



Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: 2 + q = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: Nat.succ 1 + q = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: Nat.succ 1 + q = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p



Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p


(if (c * d + c + d + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((c * d + c + d + 1) / (q + 2)))) = (if (c + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((c + 1) / (q + 2)))) + if (d + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((d + 1) / (q + 2)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: Nat.succ 1 + q = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p


(if (c * d + c + d + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((c * d + c + d + 1) / (q + 2)))) = (if (c + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((c + 1) / (q + 2)))) + if (d + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((d + 1) / (q + 2)))

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p


(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: Nat.succ 1 + q = p


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

x✝: (c + 1) * (d + 1) % p = 0 ∨ (c + 1) * (d + 1) % p > 0


(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0


inl
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0


inl
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0


inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0


inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0


inl
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

x✝: (c + 1) % p = 0 ∨ (d + 1) % p = 0


inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p)) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation (q + 2) ((c + 1) * (d + 1) / (q + 2))) = succ (nat_valuation (q + 2) ((c + 1) / (q + 2))) + if (d + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((d + 1) / (q + 2)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation (q + 2) ((c + 1) * (d + 1) / (q + 2))) = succ (nat_valuation (q + 2) ((c + 1) / (q + 2))) + nat_valuation (q + 2) (d + 1)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p)) + nat_valuation p (d + 1)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p) + nat_valuation p (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p) + nat_valuation p (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p) + nat_valuation p (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


(c + 1) / p + (d + 1) ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


a
(c + 1) / p + (d + 1) < Nat.succ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


(c + 1) / p + (d + 1) ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


(c + 1) / p + (d + 1) < Nat.succ c + Nat.succ d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


(c + 1) / p + (d + 1) ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


h
(c + 1) / p < Nat.succ c
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


(c + 1) / p + (d + 1) ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


0 < c + 1
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


(c + 1) / p + (d + 1) ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


0 < c + 1
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


0 < 1 + c
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


0 < 1 + c
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


(c + 1) / p + (d + 1) ≀ n

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p) + nat_valuation p (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p * (d + 1)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p * (d + 1)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p * (d + 1)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


(c + 1) * (d + 1) / p = (c + 1) / p * (d + 1)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) / p * (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


(c + 1) * (d + 1) / p = (c + 1) / p * (d + 1)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) / p * (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


(c + 1) * (d + 1) = p * ((c + 1) / p * (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) / p * (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


(c + 1) * (d + 1) = p * ((c + 1) / p) * (d + 1)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) / p * (d + 1))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n


(c + 1) * (d + 1) = (c + 1) * (d + 1)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n

mul_div_assoc: (c + 1) * (d + 1) / p = (c + 1) / p * (d + 1)


inl.inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) / p * (d + 1)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (c + 1) % p = 0

sum_le_n: (c + 1) / p + (d + 1) ≀ n

mul_div_assoc: (c + 1) * (d + 1) / p = (c + 1) / p * (d + 1)


inl.inl
succ (nat_valuation p ((c + 1) / p * (d + 1))) = succ (nat_valuation p ((c + 1) / p * (d + 1)))

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

x✝: (c + 1) % p = 0 ∨ (d + 1) % p = 0


inl
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation (q + 2) ((c + 1) * (d + 1) / (q + 2))) = (if (c + 1) % (q + 2) β‰  0 then ofN 0 else succ (nat_valuation (q + 2) ((c + 1) / (q + 2)))) + succ (nat_valuation (q + 2) ((d + 1) / (q + 2)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation (q + 2) ((c + 1) * (d + 1) / (q + 2))) = nat_valuation (q + 2) (c + 1) + succ (nat_valuation (q + 2) ((d + 1) / (q + 2)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = nat_valuation p (c + 1) + succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p (c + 1) + nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p (c + 1) + nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p (c + 1) + nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


c + 1 + (d + 1) / p ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


a
c + 1 + (d + 1) / p < Nat.succ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


c + 1 + (d + 1) / p ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


c + 1 + (d + 1) / p < Nat.succ c + Nat.succ d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


c + 1 + (d + 1) / p ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


h
(d + 1) / p < Nat.succ d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


c + 1 + (d + 1) / p ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


0 < d + 1
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


c + 1 + (d + 1) / p ≀ n
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


0 < d + 1
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


0 < 1 + d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


0 < 1 + d
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


c + 1 + (d + 1) / p ≀ n

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p (c + 1) + nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) * ((d + 1) / p)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) * ((d + 1) / p)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) * ((d + 1) / p)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


(c + 1) * (d + 1) / p = (c + 1) * ((d + 1) / p)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


(c + 1) * (d + 1) / p = (c + 1) * ((d + 1) / p)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


(c + 1) * (d + 1) = p * ((c + 1) * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


(c + 1) * (d + 1) = p * (c + 1) * ((d + 1) / p)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


(c + 1) * (d + 1) = (c + 1) * p * ((d + 1) / p)
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


(c + 1) * (d + 1) = (c + 1) * (p * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


p * ((c + 1) * (d + 1) / p) = p * ((c + 1) * ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n


(c + 1) * (d + 1) = (c + 1) * (d + 1)

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n

mul_div_assoc: (c + 1) * (d + 1) / p = (c + 1) * ((d + 1) / p)


inl.inr
succ (nat_valuation p ((c + 1) * (d + 1) / p)) = succ (nat_valuation p ((c + 1) * ((d + 1) / p)))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p = 0

h': (d + 1) % p = 0

sum_le_n: c + 1 + (d + 1) / p ≀ n

mul_div_assoc: (c + 1) * (d + 1) / p = (c + 1) * ((d + 1) / p)


inl.inr
succ (nat_valuation p ((c + 1) * ((d + 1) / p))) = succ (nat_valuation p ((c + 1) * ((d + 1) / p)))

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

x✝: (c + 1) * (d + 1) % p = 0 ∨ (c + 1) * (d + 1) % p > 0


(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
ofN 0 = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
ofN 0 = ofN 0 + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
ofN 0 = ofN 0 + ofN 0
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0

hc: (c + 1) % p β‰  0

hd: (d + 1) % p β‰  0


inr
ofN 0 = ofN 0 + ofN 0
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b, n: β„•

ih: βˆ€ (c d : β„•), c + d ≀ n β†’ nat_valuation p (c * d) = nat_valuation p c + nat_valuation p d

c, d: β„•

h_sum: Nat.succ c + Nat.succ d ≀ Nat.succ n

q: β„•

hq: q + 2 = p

h: (c + 1) * (d + 1) % p > 0


inr
(if (c + 1) * (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) * (d + 1) / p))) = (if (c + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((c + 1) / p))) + if (d + 1) % p β‰  0 then ofN 0 else succ (nat_valuation p ((d + 1) / p))

Goals accomplished! πŸ™
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„•



Goals accomplished! πŸ™
lemma
int_val_mul_eq_add: βˆ€ (p : β„•), nat_prime p β†’ βˆ€ (a b : β„€), int_val p (a * b) = int_val p a + int_val p b
int_val_mul_eq_add
(p :
β„•: Type
β„•
) (
prime: nat_prime p
prime
:
nat_prime: β„• β†’ Prop
nat_prime
p) (a b :
β„€: Type
β„€
) :
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p (a * b) =
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p a +
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p b :=
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„€


int_val p (a * b) = int_val p a + int_val p b
R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„€


R: Type u

inst✝: IntegralDomain R

p: β„•

prime: nat_prime p

a, b: β„€


int_val p (a * b) = int_val p a + int_val p b

Goals accomplished! πŸ™
lemma
Warning: declaration uses 'sorry'
(p a b :
β„•: Type
β„•
) :
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p (a + b) β‰₯
min: {Ξ± : Type ?u.54447} β†’ [self : Min Ξ±] β†’ Ξ± β†’ Ξ± β†’ Ξ±
min
(
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p a) (
nat_valuation: β„• β†’ β„• β†’ β„•βˆͺ∞
nat_valuation
p b) :=
R: Type u

inst✝: IntegralDomain R

p, a, b: β„•



Goals accomplished! πŸ™
lemma
Warning: declaration uses 'sorry'
(a b :
β„€: Type
β„€
) :
natAbs: β„€ β†’ β„•
natAbs
(a + b) =
max: {Ξ± : Type ?u.54532} β†’ [self : Max Ξ±] β†’ Ξ± β†’ Ξ± β†’ Ξ±
max
(
natAbs: β„€ β†’ β„•
natAbs
a) (
natAbs: β„€ β†’ β„•
natAbs
b) -
min: {Ξ± : Type ?u.54538} β†’ [self : Min Ξ±] β†’ Ξ± β†’ Ξ± β†’ Ξ±
min
(
natAbs: β„€ β†’ β„•
natAbs
a) (
natAbs: β„€ β†’ β„•
natAbs
b) :=
R: Type u

inst✝: IntegralDomain R

a, b: β„€


natAbs (a + b) = max (natAbs a) (natAbs b) - min (natAbs a) (natAbs b)

Goals accomplished! πŸ™
lemma
Warning: declaration uses 'sorry'
(p :
β„•: Type
β„•
) (a b :
β„€: Type
β„€
) :
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p (a + b) β‰₯
min: {Ξ± : Type ?u.54644} β†’ [self : Min Ξ±] β†’ Ξ± β†’ Ξ± β†’ Ξ±
min
(
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p a) (
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p b) :=
R: Type u

inst✝: IntegralDomain R

p: β„•

a, b: β„€


int_val p (a + b) β‰₯ min (int_val p a) (int_val p b)
R: Type u

inst✝: IntegralDomain R

p: β„•

a, b: β„€


R: Type u

inst✝: IntegralDomain R

p: β„•

a, b: β„€


int_val p (a + b) β‰₯ min (int_val p a) (int_val p b)

Goals accomplished! πŸ™
lemma
Warning: declaration uses 'sorry'
(p :
β„•: Type
β„•
) (a b :
β„€: Type
β„€
) (
h: int_val p a < int_val p b
h
:
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p a <
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p b) :
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p (a + b) =
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p a :=
R: Type u

inst✝: IntegralDomain R

p: β„•

a, b: β„€

h: int_val p a < int_val p b


int_val p (a + b) = int_val p a

Goals accomplished! πŸ™
lemma
Warning: declaration uses 'sorry'
(p :
β„•: Type
β„•
) (
gt1: 1 < p
gt1
:
1: ?m.54986
1
< p) (a :
β„€: Type
β„€
) :
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p a = ∞ ↔ a =
0: ?m.55027
0
:=
R: Type u

inst✝: IntegralDomain R

p: β„•

gt1: 1 < p

a: β„€



Goals accomplished! πŸ™
def
primeVal: {p : β„•} β†’ nat_prime p β†’ SurjVal ↑p
primeVal
{p :
β„•: Type
β„•
} (
hp: nat_prime p
hp
:
nat_prime: β„• β†’ Prop
nat_prime
p) :
SurjVal: {R : Type ?u.55068} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.55068
SurjVal
(
ofNat: β„• β†’ β„€
ofNat
p) := { v :=
int_val: β„• β†’ β„€ β†’ β„•βˆͺ∞
int_val
p, v_uniformizer :=
int_val_uniformizer: βˆ€ {p : β„•}, 1 < p β†’ int_val p ↑p = ofN 1
int_val_uniformizer
hp: nat_prime p
hp
.
left: βˆ€ {a b : Prop}, a ∧ b β†’ a
left
, v_mul_eq_add_v :=
int_val_mul_eq_add: βˆ€ (p : β„•), nat_prime p β†’ βˆ€ (a b : β„€), int_val p (a * b) = int_val p a + int_val p b
int_val_mul_eq_add
p
hp: nat_prime p
hp
, v_add_ge_min_v :=
int_val_add_ge_min: βˆ€ (p : β„•) (a b : β„€), int_val p (a + b) β‰₯ min (int_val p a) (int_val p b)
int_val_add_ge_min
p, v_eq_top_iff_zero :=
int_val_eq_top_iff_zero: βˆ€ (p : β„•), 1 < p β†’ βˆ€ (a : β„€), int_val p a = ∞ ↔ a = 0
int_val_eq_top_iff_zero
p
hp: nat_prime p
hp
.
left: βˆ€ {a b : Prop}, a ∧ b β†’ a
left
} def
decr_val_p: β„• β†’ (β„€ β†’ β„•βˆͺ∞) β†’ β„€ β†’ β„€
decr_val_p
(p :
β„•: Type
β„•
) (val :
β„€: Type
β„€
β†’
β„•βˆͺ∞: Type
β„•βˆͺ∞
) (k :
β„€: Type
β„€
) :
β„€: Type
β„€
:= match val k with | 0 => k | _ => k / p lemma
zero_valtn_decr_p: βˆ€ {p : β„•} {k : β„€} (val : β„€ β†’ β„•βˆͺ∞), val k = 0 β†’ decr_val_p p val k = k
zero_valtn_decr_p
{p:
β„•: Type
β„•
} {k :
β„€: Type
β„€
} (val :
β„€: Type
β„€
β†’
β„•βˆͺ∞: Type
β„•βˆͺ∞
) (
h: val k = 0
h
: val k =
0: ?m.55869
0
) :
decr_val_p: β„• β†’ (β„€ β†’ β„•βˆͺ∞) β†’ β„€ β†’ β„€
decr_val_p
p val k = k :=
R: Type u

inst✝: IntegralDomain R

p: β„•

k: β„€

val: β„€ β†’ β„•βˆͺ∞

h: val k = 0


decr_val_p p val k = k
R: Type u

inst✝: IntegralDomain R

p: β„•

k: β„€

val: β„€ β†’ β„•βˆͺ∞

h: val k = 0


decr_val_p p val k = k
R: Type u

inst✝: IntegralDomain R

p: β„•

k: β„€

val: β„€ β†’ β„•βˆͺ∞

h: val k = 0


(match val k with | ofN Nat.zero => k | x => k / ↑p) = k
R: Type u

inst✝: IntegralDomain R

p: β„•

k: β„€

val: β„€ β†’ β„•βˆͺ∞

h: val k = 0


decr_val_p p val k = k
R: Type u

inst✝: IntegralDomain R

p: β„•

k: β„€

val: β„€ β†’ β„•βˆͺ∞

h: val k = 0


(match 0 with | ofN Nat.zero => k | x => k / ↑p) = k

Goals accomplished! πŸ™
def
norm_repr_p: β„• β†’ β„€ β†’ β„€
norm_repr_p
(p :
β„•: Type
β„•
) (x :
β„€: Type
β„€
) :
β„€: Type
β„€
:= (x % (p :
β„€: Type
β„€
) + p) % (p :
β„€: Type
β„€
) lemma
Warning: declaration uses 'sorry'
(p :
β„•: Type
β„•
) : βˆ€ n :
β„•: Type
β„•
, (
primeVal: {p : β„•} β†’ nat_prime p β†’ SurjVal ↑p
primeVal
hp: ?m.56470
hp
).
v: {R : Type ?u.56482} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
n >
0: ?m.56578
0
↔ p ∣ n :=
sorry: ?m.56810
sorry
def
Warning: declaration uses 'sorry'
{p :
β„•: Type
β„•
} (
hp: nat_prime p
hp
:
nat_prime: β„• β†’ Prop
nat_prime
p) :
EnatValRing: {R : Type ?u.56827} β†’ R β†’ [inst : IntegralDomain R] β†’ Type ?u.56827
EnatValRing
(p :
β„€: Type
β„€
) := { valtn :=
primeVal: {p : β„•} β†’ nat_prime p β†’ SurjVal ↑p
primeVal
hp: nat_prime p
hp
, decr_val :=
decr_val_p: β„• β†’ (β„€ β†’ β„•βˆͺ∞) β†’ β„€ β†’ β„€
decr_val_p
p (
primeVal: {p : β„•} β†’ nat_prime p β†’ SurjVal ↑p
primeVal
hp: nat_prime p
hp
).
v: {R : Type ?u.56938} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
, zero_valtn_decr :=
zero_valtn_decr_p: βˆ€ {p : β„•} {k : β„€} (val : β„€ β†’ β„•βˆͺ∞), val k = 0 β†’ decr_val_p p val k = k
zero_valtn_decr_p
(
primeVal: {p : β„•} β†’ nat_prime p β†’ SurjVal ↑p
primeVal
hp: nat_prime p
hp
).
v: {R : Type ?u.56952} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
, pos_valtn_decr :=
sorry: ?m.56979
sorry
, residue_char := p, def_char :=
def_char_p: βˆ€ {p : β„•} {hp : nat_prime p} (p_1 n : β„•), SurjVal.v (primeVal hp) ↑n > 0 ↔ p_1 ∣ n
def_char_p
p, norm_repr :=
norm_repr_p: β„• β†’ β„€ β†’ β„€
norm_repr_p
p, quad_roots_in_residue_field := fun
a: ?m.58104
a
b: ?m.58107
b
c: ?m.58110
c
=>
Int.quad_root_in_ZpZ: β„€ β†’ β„€ β†’ β„€ β†’ β„• β†’ Bool
Int.quad_root_in_ZpZ
a: ?m.58104
a
b: ?m.58107
b
c: ?m.58110
c
p } lemma
Warning: declaration uses 'sorry'
:
nat_prime: β„• β†’ Prop
nat_prime
2: ?m.58359
2
:=
R: Type u

inst✝: IntegralDomain R


R: Type u

inst✝: IntegralDomain R


βˆ€ (a b : β„•), a * b % 2 = 0 β†’ a % 2 = 0 ∨ b % 2 = 0
R: Type u

inst✝: IntegralDomain R



Goals accomplished! πŸ™
lemma
Warning: declaration uses 'sorry'
:
nat_prime: β„• β†’ Prop
nat_prime
3: ?m.58569
3
:=
R: Type u

inst✝: IntegralDomain R


R: Type u

inst✝: IntegralDomain R


βˆ€ (a b : β„•), a * b % 3 = 0 β†’ a % 3 = 0 ∨ b % 3 = 0
R: Type u

inst✝: IntegralDomain R



Goals accomplished! πŸ™
def
modulo: (x : β„€) β†’ (p : β„•) β†’ ?m.58783 x p
modulo
(x :
β„€: Type
β„€
) (p :
β„•: Type
β„•
) := (x % (p:
β„€: Type
β„€
) + p) % (p:
β„€: Type
β„€
) def
inv_mod: (x : β„€) β†’ (p : β„•) β†’ ?m.59086 x p
inv_mod
(x :
β„€: Type
β„€
) (p :
β„•: Type
β„•
) :=
modulo: β„€ β†’ β„• β†’ β„€
modulo
(x ^ (p -
2: ?m.59101
2
)) p def
has_double_root: (a b c : β„€) β†’ {p : β„•} β†’ (hp : nat_prime p) β†’ ?m.59371 a b c hp
has_double_root
(a b c :
β„€: Type
β„€
) {p :
β„•: Type
β„•
} (
hp: nat_prime p
hp
:
nat_prime: β„• β†’ Prop
nat_prime
p) := let
v_p: ?m.59379
v_p
:= (
primeEVR: {p : β„•} β†’ nat_prime p β†’ EnatValRing ↑p
primeEVR
hp: nat_prime p
hp
).
valtn: {R : Type ?u.59382} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.59392} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
;
v_p: ?m.59379
v_p
a =
0: ?m.59415
0
∧
v_p: ?m.59379
v_p
(b ^
2: ?m.59651
2
-
4: ?m.59667
4
* a * c) >
0: ?m.59888
0
def
double_root: (a b c : β„€) β†’ (p : β„•) β†’ ?m.60158 a b c p
double_root
(a b c :
β„€: Type
β„€
) (p :
β„•: Type
β„•
) := if p =
2: ?m.60166
2
then
modulo: β„€ β†’ β„• β†’ β„€
modulo
c
2: ?m.60200
2
else
modulo: β„€ β†’ β„• β†’ β„€
modulo
(-b *
inv_mod: β„€ β†’ β„• β†’ β„€
inv_mod
(
2: ?m.60210
2
* a) p) p lemma
Warning: declaration uses 'sorry'
{p :
β„•: Type
β„•
} (
hp: nat_prime p
hp
:
nat_prime: β„• β†’ Prop
nat_prime
p) (a b c :
β„€: Type
β„€
) (
H: has_double_root a b c hp
H
:
has_double_root: β„€ β†’ β„€ β†’ β„€ β†’ {p : β„•} β†’ nat_prime p β†’ Prop
has_double_root
a b c
hp: nat_prime p
hp
) : let
x: ?m.60429
x
:=
double_root: β„€ β†’ β„€ β†’ β„€ β†’ β„• β†’ β„€
double_root
a b c p; let
v_p: ?m.60432
v_p
:= (
primeEVR: {p : β„•} β†’ nat_prime p β†’ EnatValRing ↑p
primeEVR
hp: nat_prime p
hp
).
valtn: {R : Type ?u.60434} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ EnatValRing p β†’ SurjVal p
valtn
.
v: {R : Type ?u.60444} β†’ {p : R} β†’ [inst : IntegralDomain R] β†’ SurjVal p β†’ R β†’ β„•βˆͺ∞
v
;
v_p: ?m.60432
v_p
(a*
x: ?m.60429
x
^
2: ?m.60469
2
+ b*
x: ?m.60429
x
+ c) >
0: ?m.60696
0
∧
v_p: ?m.60432
v_p
(
2: ?m.61008
2
*a*
x: ?m.60429
x
+ b) >
0: ?m.61092
0
:=
R: Type u

inst✝: IntegralDomain R

p: β„•

hp: nat_prime p

a, b, c: β„€

H: has_double_root a b c hp


let x := double_root a b c p; let v_p := (primeEVR hp).valtn.v; v_p (a * x ^ 2 + b * x + c) > 0 ∧ v_p (2 * a * x + b) > 0

Goals accomplished! πŸ™
end Int